由于Array.prototype本身是一个数组([])reference here,如果我们必须替换原生原型我们如何放置文字对象而不是我们需要放置文字数组呢?
Array.prototype=[]
答案 0 :(得分:2)
将新数组分配给Array.prototype
没有意义。它通常是只读属性,分配将无声地失败。
> a = []
[]
> a === Array.prototype
false
> Array.prototype = a
[]
> a === Array.prototype
false
即使作业成功,也必须使用原始原型创建替换阵列。因此,原始原型将是新原型对象的[[prototype]]
,并且仍然可以在赋值后创建的任何数组的原型链中找到所有本机方法。
如果要替换(隐藏)Array
的本机实例方法(例如push
),只需将新方法分配给相应的属性:
Array.prototype.push = . . .;
另外,请参阅this answer了解如何扩展本机方法(例如push
)。 (除非你只是以某种方式扩展本机方法,否则我无法想象这是一个除了非常糟糕的事情之外的用例。即便如此......)
答案 1 :(得分:2)
最新版本的JavaScript EcmaScript 5改变了
的含义[]
这
new Array()
使用原始Array
构造函数进行创建,而不是像JavaScript的早期版本那样在范围内查找名称Array
。
The EcmaScript 5 specification说
11.1.4阵列初始化程序
...
生产 ArrayLiteral:[Elision opt ] 评估如下:
- 让数组成为创建新对象的结果,就像表达式
醇>new Array()
一样,其中Array
是具有该名称的标准内置构造函数。
粗体文本是EcmaScript 5中的新内容,意味着[]
的含义不受Array
全局或其成员(包括其原型)的任何后续修改的影响。