由于 Array.prototype 本身在这里是一个数组([]) 引用,如果我们必须替换原生原型,我们如何放置文字对象而不是我们需要放置文字数组不是吗?
Array.prototype=[]
由于 Array.prototype 本身在这里是一个数组([]) 引用,如果我们必须替换原生原型,我们如何放置文字对象而不是我们需要放置文字数组不是吗?
Array.prototype=[]
将新数组分配给Array.prototype
. 它通常是一个只读属性,分配将静默失败。
> a = []
[]
> a === Array.prototype
false
> Array.prototype = a
[]
> a === Array.prototype
false
即使分配成功,替换数组也必须在原始原型就位的情况下创建。因此,原始原型将是[[prototype]]
新原型对象的原型,并且所有本地方法仍将在分配后创建的任何数组的原型链中找到。
如果要替换(隐藏)Array
(例如)的本机实例方法push
,只需将新方法分配给适当的属性:
Array.prototype.push = . . .;
此外,请参阅此答案以了解如何扩展本机方法(例如push
)。(除非您只是以某种方式扩展本机方法,否则我无法想象这样的用例除了一件非常糟糕的事情之外。即使那样......)
EcmaScript 5,最新版本的 JavaScript,改变了
[]
从
new Array()
使用原始构造函数创建,而不是像早期版本的 JavaScript 那样在范围内Array
查找名称。Array
11.1.4 数组初始化器
...
产生式 ArrayLiteral : [ Elision opt ]评估如下:
- 让数组成为创建新对象的结果,就好像通过表达式
new Array()
whereArray
是具有该名称的标准内置构造函数一样。
粗体文本是 EcmaScript 5 中的新内容,表示 的含义[]
不受任何后续对Array
全局或其成员(包括其原型)的修改的影响。