覆盖现代浏览器中的全局变量
Override globals in modern browsers
我刚刚读了John Resig关于在浏览器(例如Array)中重写全局变量的文章,但当我在浏览器中尝试该示例时,没有发生任何事情。
这里的代码:
var sec = {};
function Array() {
alert(1);
sec = this;
};
当我在浏览器控制台中运行["zdxc", "sd", 1111, 11.1]
时,什么也没发生。已声明数组,但未显示警报。
这是一个在现代浏览器中修复的错误,还是在某些版本的浏览器中仍然有效?
这是因为您覆盖了使调用new Array();
返回自定义对象而不是实际Array
的Array构造函数。
所以呼叫
var arr = ["zdxc", "sd", 1111, 11.1];
使得CCD_ 4成为本地CCD_。
调用
var arr_override = new Array();
使arr_override
成为您之前声明的类型的Object
,从而执行您的alert
-语句。重写构造函数会从标识符中"擦除"Array
-初始化,用构造函数函数替换它。它不是一个真正的Array
。
根据这个问题的答案,自2008年以来,在所有主要浏览器中,Array Literal([]
)都没有受到这种行为的影响。。
编辑:
经过一番尝试,似乎不可能修改[]
符号的行为,也不建议修改本机对象(尤其是它们的构造函数)
如何可能扩展原型并修改现有的属性/方法,如下面的示例
var arr = [];
arr.push('2323');
alert(arr);
Array.prototype.push = function() { alert('trololololo'); }
arr.push(123);
希望这能有所帮助。干杯
相关文章:
- 全局变量和全局对象的属性之间有什么区别吗
- delete关键字在全局变量上的不同行为
- 在javascript函数中设置全局变量
- 如何将getJson的响应保存在全局变量中
- 从Javascript方法返回全局变量
- AngularJS中的封装窗口全局变量
- javascript隐式全局变量
- 如何从onclick函数设置全局变量并将其传递给另一个JS文件
- 如何使全局变量仅特定于该文件
- 在page.open()-PhantomJS中无法访问全局变量
- 使用全局变量来存储数字(JavaScript)
- 如何将变量声明为全局变量
- 如何在 Node 中访问模块全局变量.js例如浏览器中的 window.variable
- 给我的浏览器一个可通过javascript访问的全局变量
- 全局变量正在崩溃火狐浏览器
- 为什么html id在浏览器中显示为全局变量
- 刷新浏览器后的Ruby全局变量
- Mocha浏览器全局变量,它们在哪里?
- 覆盖现代浏览器中的全局变量
- 浏览器中找不到Browserify全局变量