由於Array.prototype本身是一個數組([])reference here,如果我們必須替換原生原型,我們如何放置文字對象,而不是我們需要放置文字數組是不是?Javascript Array原型
Array.prototype=[]
由於Array.prototype本身是一個數組([])reference here,如果我們必須替換原生原型,我們如何放置文字對象,而不是我們需要放置文字數組是不是?Javascript Array原型
Array.prototype=[]
將一個新數組分配給Array.prototype
毫無意義。它通常是一個只讀屬性,分配將失敗。
> a = []
[]
> a === Array.prototype
false
> Array.prototype = a
[]
> a === Array.prototype
false
即使賦值成功,替換數組也必須在創建原始原型的情況下創建。因此,原始原型將是新原型對象的[[prototype]]
,並且在賦值之後創建的任何數組的原型鏈中仍可找到所有原生方法。
如果要替換(隱藏)Array
本地實例方法(例如,push
),只是分配新的方法,以適當的屬性:
Array.prototype.push = . . .;
另外,請參閱this answer如何你可能會延長本地方法(例如push
)。 (除非你只是以某種方式擴展本地方法,否則我無法想象一個用例,這是一件非常糟糕的事情,即使......)
EcmaScript 5,latest JavaScript的版本,從
new Array()
改變
[]
意義創建使用原Array
構造函數,而不是在範圍查找名稱Array
早期版本的JavaScript一樣。
The EcmaScript 5 specification說
11.1.4陣列初始化劑
...
生產ArrayLiteral:[省音選擇]如下評價:
- 讓數組成爲res ult創建一個新對象,就像通過表達式
new Array()
其中Array
是具有該名稱的標準內置構造函數。
的粗體文字是在5的EcmaScript新,並意味着[]
含義不受任何後續修改到Array
全球或其成員包括其原型。
您不應該替換原生原型,而應該幾乎不會修改原生原型。 – SLaks 2013-04-28 19:09:14
單詞「文字」只是描述了用於創建對象的語法。如果你使用'[]'或'new Array()',你會得到同樣的結果。所以,如果你要這樣做,你可以使用任何語法......但我相信你不會想要這樣做。 – 2013-04-28 19:18:22