2017-02-25 59 views
3

爲什麼(如果有的話),我應該避免這樣做:爲什麼不在2017年將Array.prototype metods添加到NodeList.prototype中?

if (NodeList.prototype.map === undefined) { 
    NodeList.prototype.map = Array.prototype.map 
} 

或其他任何東西從here(我不是指[].,我知道這是慢)

據我所知,這行爲在Prototype 1.0和Mootools時代流行起來,並被用於魯莽放棄,只是由於瀏覽器之間的不一致而迅速貶值。

似乎現在工作很好,特別是對於這樣一種保守的使用。我們是否還應該避開?

回答

1

因爲如果NodeList得到標準map方法,它會與您的衝突。

即使你檢查當前方法是否存在,例如,通過檢查是否原型分配替換之前持有undefined,誰寫的Web標準的人必須確保他們的更改不會破壞我們 (意思是網絡作者的)工作代碼。向後兼容性是開放網絡的核心原則之一;我們相信,如果我們今天編寫代碼並將其保留一週甚至幾年,它應該仍然有效。

原型和Mootools由於這個原因成爲問題;他們非常受歡迎,他們毫不猶豫地修改了他們認爲合適的嵌入式原型。

有沒有想過爲什麼.contains()在字符串和數組上都不太熟悉.includes()?哦,是的,that was because Mootools had already defined .contains() and the new standard ended up breaking a significant number of existing web pages通過定義不一致的實現。

TL; DR:對於任何一個頁面來說,這可能並不重要,但當它被流行的圖書館使用時,它可能會成爲一個大問題,因此人們往往完全避免這種做法。

相關問題