原型链污染概念的补充

目录

在理解Function之前,我们先回顾下constructor的概念

Function概念

eval( )和Function( )区别


在理解Function之前,我们先回顾下constructor的概念

constructor是一个对象的数据属性,创建对象后,访问constructor属性,可以返回构造函数对象的来源,(不是改对象的原型链上级,二者不同),见下面例子:

var a = 1;
a.__proto__
//Number {0, constructor: ƒ, toExponential: ƒ, toFixed: ƒ, toPrecision: ƒ, …}constructor: ƒ Number()toExponential: ƒ toExponential()toFixed: ƒ toFixed()toLocaleString: ƒ toLocaleString()toPrecision: ƒ toPrecision()toString: ƒ toString()valueOf: ƒ valueOf()[[Prototype]]: Object[[PrimitiveValue]]: 0
a.__proto__.constructor
//ƒ Number() { [native code] }
a.constructor
//ƒ Number() { [native code] }
a.constructor === Number
//true
var b = Number(1);
b.constructor === a.constructor
//true

上面代码中可以看到一部分constructor的特点:

1、变量a的原型链的上级是Number对象(a.__proto__)

2、Number对象的constructor属性和变量a的constructor属性一样,可见a的原型链的上级和constructor属性是包含关系。

3、Number对象的constructor属性值是Number方法,通过Number方法构造出的b,与a的属性相同,因为constructor属性,可以返回构造该对象的来源。

简单来说就是constructor属性就是告诉你这个对象是从哪儿来的。

在javascript中,有时会看到大写的Function,这个和小写的function有本质的区别

function是一个用于定义函数的关键字

Function是代表所有函数的内置原型对象

Function概念

每一个javascript的function实际上都是Function对象,在控制台运行如下,返回Ture

(function () {}).constructor === Function

Function是javascript内置的对象,Function用以实现很多基础功能,如Number、toString等。

Function( )constructor

Function( )构造器可以构建一个Function对象,可以直接调用Function()构造器动态的创建函数。但是这样会存在类似eval()的隐患和一些功能问题。

eval( )和Function( )区别

eval( )可以访问本地的变量、全局变量

Function( )创建函数时只能执行全局变量

比如eval( )代码执行时可以这样加载module

eval() funvtion
require('fs')

Function( )则需要这样

Function() constructor
global.process.mainModule.require('fs')

Function( )constructor语法

new Function(functionBody)
new Function(arg0, functionBody)
new Function(arg0, arg1, functionBody)
new Function(arg0, arg1, /*... ,*/ argN, functionBody)

Function(functionBody)
Function(arg0, functionBody)
Function(arg0, arg1, functionBody)
Function(arg0, arg1, /*... ,*/ argN, functionBody)

你可能感兴趣的:(安全,javascript,jquery,html5)