说我有以下代码:
var secrets;
Array = function() {
secrets = this;
};
Run Code Online (Sandbox Code Playgroud)
上面的示例的作者说,代码正在重新定义Array构造函数.首先,我不确定所指的this是什么.任何人都可以建议吗?
第二:以下代码是否相同?
var secrets;
function Array() {
secrets = this;
}
Run Code Online (Sandbox Code Playgroud)
顺便提一下,上面的代码来自以下关于Json漏洞的文章:请参阅此处
在这两个例子中你定义的变量Array是一个function指派this给secrets.事实上,已经存在一个全局对象,称为Array页面中的其他JS可能会或可能不会用作Constructor制作数组.如果您弹出控制台并重新将Array指定为其他内容,则可能会开始从明确依赖的代码中获取错误Array.然而,字面上的数组[]继续工作得很好,事实上,它们__proto__仍然指向了什么Array.prototype.所以:
var arr1 = new Array('a','b','c');
// arr[0] -> 'a'
var arr2 = ['d','e','f'];
// arr[0] -> 'd'
var secrets;
Array = function() { secrets = this; };
var arr3 = new Array('g','h','i'); // nothing wrong here, because Array is a function
// arr3[0] -> undefined
// Array is just a function, you can't make arrays with new Array anymore
// and arr3 is just a function
var arr4 = ['j','k','l'];
// arr4[0] -> 'j'
// making array literals still works
Run Code Online (Sandbox Code Playgroud)
至于this,没什么奇怪的,仍然遵循规则this.您分配函数的事实Array不会改变this行为方式.因此this指向浏览器中的全局对象,window除非您使用new或使用call或实例化apply
两个样本之间的区别是函数表达式和函数声明之间的区别,请参阅:Javascript中函数表达式与声明之间的区别是什么?
| 归档时间: |
|
| 查看次数: |
1700 次 |
| 最近记录: |