Javascript数组原型
由于Array.prototype本身是一个数组([]),如果我们必须替换本机原型,我们如何才能放置literal对象,而不是需要放置literal数组,不是吗Javascript数组原型,javascript,Javascript,由于Array.prototype本身是一个数组([]),如果我们必须替换本机原型,我们如何才能放置literal对象,而不是需要放置literal数组,不是吗 Array.prototype=[] 将新数组分配给array.prototype没有意义。它通常是一个只读属性,赋值将以静默方式失败 > a = [] [] > a === Array.prototype false > Array.prototype = a [] > a === Array.prototy
Array.prototype=[]
将新数组分配给
array.prototype
没有意义。它通常是一个只读属性,赋值将以静默方式失败
> a = []
[]
> a === Array.prototype
false
> Array.prototype = a
[]
> a === Array.prototype
false
即使任务成功,替换阵列也必须在原始原型就位的情况下创建。因此,原始原型将是新原型对象的[[prototype]]
,所有本机方法仍将在赋值后创建的任何数组的原型链中找到
如果要替换(隐藏)数组的本机实例方法(例如,push
),只需将新方法指定给相应的属性:
Array.prototype.push = . . .;
另外,请参阅以了解如何扩展本机方法(例如
push
)。(除非您只是以某种方式扩展一个本机方法,否则我无法想象一个用例,在这个用例中,这是一件非常糟糕的事情。即使如此……将一个新数组分配给数组。prototype
。它通常是一个只读属性,赋值将以静默方式失败
> a = []
[]
> a === Array.prototype
false
> Array.prototype = a
[]
> a === Array.prototype
false
即使任务成功,替换阵列也必须在原始原型就位的情况下创建。因此,原始原型将是新原型对象的[[prototype]]
,所有本机方法仍将在赋值后创建的任何数组的原型链中找到
如果要替换(隐藏)数组的本机实例方法(例如,push
),只需将新方法指定给相应的属性:
Array.prototype.push = . . .;
另外,请参阅以了解如何扩展本机方法(例如
push
)。(除非您只是以某种方式扩展了一个本机方法,否则我无法想象这样的用例会是一件非常糟糕的事情。即使如此……最新版本的JavaScript EcmaScript 5改变了
[]
从
使用原始的Array
构造函数创建,而不是像早期版本的JavaScript那样在范围中查找名称Array
说
11.1.4数组初始化器
生产阵列并行:[Elisionopt]的评估如下:
new array()
一样,其中array
是具有该名称的标准内置构造函数。粗体文本在EcmaScript 5中是新的,这意味着
[]
的含义不受数组
全局或其成员(包括其原型)的任何后续修改的影响。最新版本的JavaScript EcmaScript 5更改了
[]
从
使用原始的Array
构造函数创建,而不是像早期版本的JavaScript那样在范围中查找名称Array
说
11.1.4数组初始化器
生产阵列并行:[Elisionopt]的评估如下:
new array()
一样,其中array
是具有该名称的标准内置构造函数。[]
的含义不受对数组
全局或其成员(包括其原型)的任何后续修改的影响。您永远不应该替换本机原型,也几乎不应该修改本机原型。“文字”一词只描述用于创建对象的语法。如果您执行[]
或新建数组()
,您将得到相同的结果。所以,如果你要这么做,你可以使用任何一种语法。。。虽然我相信你不会真的想这么做。你永远不应该替换本机原型,也不应该修改本机原型。单词“literal”只是描述用于创建对象的语法。如果您执行[]
或新建数组()
,您将得到相同的结果。所以,如果你要这么做,你可以使用任何一种语法。。。虽然我相信你不会真的想这么做。