Javascript数组原型

Javascript数组原型,javascript,Javascript,由于Array.prototype本身是一个数组([]),如果我们必须替换本机原型,我们如何才能放置literal对象,而不是需要放置literal数组,不是吗 Array.prototype=[] 将新数组分配给array.prototype没有意义。它通常是一个只读属性,赋值将以静默方式失败 > a = [] [] > a === Array.prototype false > Array.prototype = a [] > a === Array.prototy

由于Array.prototype本身是一个数组([]),如果我们必须替换本机原型,我们如何才能放置literal对象,而不是需要放置literal数组,不是吗

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
    是具有该名称的标准内置构造函数。
  • 粗体文本在EcmaScript 5中是新的,这意味着
    []
    的含义不受对
    数组
    全局或其成员(包括其原型)的任何后续修改的影响。

    您永远不应该替换本机原型,也几乎不应该修改本机原型。“文字”一词只描述用于创建对象的语法。如果您执行
    []
    新建数组()
    ,您将得到相同的结果。所以,如果你要这么做,你可以使用任何一种语法。。。虽然我相信你不会真的想这么做。你永远不应该替换本机原型,也不应该修改本机原型。单词“literal”只是描述用于创建对象的语法。如果您执行
    []
    新建数组()
    ,您将得到相同的结果。所以,如果你要这么做,你可以使用任何一种语法。。。虽然我相信你不会真的想这么做。