由于Array.prototype本身是一个数组([])reference here,如果我们必须替换原生原型,我们如何放置文字对象,而不是我们需要放置文字数组是不是?Javascript Array原型
Array.prototype=[]
由于Array.prototype本身是一个数组([])reference here,如果我们必须替换原生原型,我们如何放置文字对象,而不是我们需要放置文字数组是不是?Javascript Array原型
Array.prototype=[]
将一个新数组分配给Array.prototype
毫无意义。它通常是一个只读属性,分配将失败。
> a = []
[]
> a === Array.prototype
false
> Array.prototype = a
[]
> a === Array.prototype
false
即使赋值成功,替换数组也必须在创建原始原型的情况下创建。因此,原始原型将是新原型对象的[[prototype]]
,并且在赋值之后创建的任何数组的原型链中仍可找到所有原生方法。
如果要替换(隐藏)Array
本地实例方法(例如,push
),只是分配新的方法,以适当的属性:
Array.prototype.push = . . .;
另外,请参阅this answer如何你可能会延长本地方法(例如push
)。 (除非你只是以某种方式扩展本地方法,否则我无法想象一个用例,这是一件非常糟糕的事情,即使......)
EcmaScript 5,latest JavaScript的版本,从
new Array()
改变
[]
意义创建使用原Array
构造函数,而不是在范围查找名称Array
早期版本的JavaScript一样。
The EcmaScript 5 specification说
11.1.4阵列初始化剂
...
生产ArrayLiteral:[省音选择]如下评价:
- 让数组成为res ult创建一个新对象,就像通过表达式
new Array()
其中Array
是具有该名称的标准内置构造函数。
的粗体文字是在5的EcmaScript新,并意味着[]
含义不受任何后续修改到Array
全球或其成员包括其原型。
您不应该替换原生原型,而应该几乎不会修改原生原型。 – SLaks 2013-04-28 19:09:14
单词“文字”只是描述了用于创建对象的语法。如果你使用'[]'或'new Array()',你会得到同样的结果。所以,如果你要这样做,你可以使用任何语法......但我相信你不会想要这样做。 – 2013-04-28 19:18:22