当前位置:  开发笔记 > 编程语言 > 正文

覆盖Array构造函数不会影响[],对吧?

如何解决《覆盖Array构造函数不会影响[],对吧?》经验,为你挑选了2个好方法。

我刚读过这篇文章:http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx

如果你在创建/ 时选择使用构造函数,我的印象是覆盖ObjectArray只有效果,但是,根据那篇文章,它也对文字创建有影响(和)......arraysobjects{}[]

我的逻辑:

Array = function(){ alert('Hi'); };

[1,2,3,4,5];
([1,2,3,4,5]);
var a = [1,2,3,4,5];

// ...
// ... Nothing is alerted

那么,我是疯了还是有一些我不知道的特定于实现的怪癖?



1> Josef Pflege..:

据我所知,这是ECMAScript规范的一个问题,并在一年多前在所有主流浏览器中得到修复.这是一个链接,链接到最相关的链接;)

但实际上回答你的问题,是的Object,Array构造函数也被用于文字创作.实现的修复浏览器只是使这些(和其他)不变,因此它们不能被自定义脚本覆盖.



2> Mike Samuel..:

EcmaScript 5草案标准化了Josef提到的这个修复.它根据11.1.4节中描述的创建上下文时Array全局值的值来指定数组构造函数的行为.

语义

生产 ArrayLiteral : [ Elisionopt ] 评估如下:

    令数组是创建一个新对象的结果,就好像表达式 new Array()where Array是具有该名称的标准内置构造函数一样.

而不是允许替换Array构造函数的旧ES 262行为:

语义

生产ArrayLiteral : [ Elisionopt ]评估如下:

    像表达式一样创建一个新数组new Array().

也就是说,不要依赖[]老年口译员的合理工作.

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有