2013-04-28 54 views
0

由於Array.prototype本身是一個數組([])reference here,如果我們必須替換原生原型,我們如何放置文字對象,而不是我們需要放置文字數組是不是?Javascript Array原型

Array.prototype=[] 
+1

您不應該替換原生原型,而應該幾乎不會修改原生原型。 – SLaks 2013-04-28 19:09:14

+0

單詞「文字」只是描述了用於創建對象的語法。如果你使用'[]'或'new Array()',你會得到同樣的結果。所以,如果你要這樣做,你可以使用任何語法......但我相信你不會想要這樣做。 – 2013-04-28 19:18:22

回答

2

將一個新數組分配給Array.prototype毫無意義。它通常是一個只讀屬性,分配將失敗。

> a = [] 
[] 
> a === Array.prototype 
false 
> Array.prototype = a 
[] 
> a === Array.prototype 
false 

即使賦值成功,替換數組也必須在創建原始原型的情況下創建。因此,原始原型將是新原型對象的[[prototype]],並且在賦值之後創建的任何數組的原型鏈中仍可找到所有原生方法。

如果要替換(隱藏)Array本地實例方法(例如,push),只是分配新的方法,以適當的屬性:

Array.prototype.push = . . .; 

另外,請參閱this answer如何你可能會延長本地方法(例如push)。 (除非你只是以某種方式擴展本地方法,否則我無法想象一個用例,這是一件非常糟糕的事情,即使......)

2

EcmaScript 5,latest JavaScript的版本,從

new Array() 

改變

[] 

意義創建使用原Array構造函數,而不是在範圍查找名稱Array早期版本的JavaScript一樣。

The EcmaScript 5 specification

11.1.4陣列初始化劑

...

生產ArrayLiteral:[省音選擇]如下評價:

  1. 讓數組成爲res ult創建一個新對象,就像通過表達式new Array()其中Array是具有該名稱的標準內置構造函數。

的粗體文字是在5的EcmaScript新,並意味着[]含義不受任何後續修改到Array全球或其成員包括其原型。