在JavaScript內置對象中定義了許多函數。例如String
具有slice()
,split()
和Array
具有join()
並且它們可以通過簡單地使用我們是否應該始終保留JavaScript內置對象方法的副本?
Array.prototype.join = 'test'
被覆蓋(雖然它是一種不好的做法),則所有的陣列將失去join()
方法
然而,作爲開源項目的開發者,我們應該如何看待原型的這種潛在變化?這將成爲一個問題,因爲我們很可能會或多或少地使用這些功能來實現某些功能。
在jQuery中,它會不斷的一些方法,一個副本:
但只有一些方法保持安全,如果通過的jQuery的源代碼閱讀,你會發現一些String
方法直接在String對象上調用。
當然,我們可以隨時保留內置JavaScript對象的所有方法的副本,但它很雜亂。事實上,它也成爲執行時機的問題。如果程序在原型更改之前執行,那就沒問題。但如果反之亦然,它將會失敗。所以我更感興趣的是,當他們決定保留一些方法的副本時,他們知道什麼時候jQuery或其他庫,他們的決定背後的哲學是什麼?
謝謝。
可能的重複[爲什麼擴展本機對象是一個不好的做法?](http://stackoverflow.com/questions/14034180/why-is-extending-native-objects-a-bad-practice) – CBroe
爲什麼你需要打擾原型。還有其他幾種方法。在這樣設置之前進行檢查不是更好嗎? – Jai
如果我想和我正在合作的程序員開個玩笑,我只會覆蓋原始原型。 – Nonemoticoner