我在某處使用prototype
來擴展本機對象(String
,Number
, Array
等)是一個壞主意。這是真的?爲什麼或者爲什麼不?正在使用Prototype來擴展本機對象嗎?
14
A
回答
6
我不認爲這是壞事。如果你看看Ruby on Rails,很多本地對象都會擴展自定義功能,這是一個非常好的框架。
什麼是壞的是,如果你更改本地對象現有方法。這可能會導致不可預見的後果。
+0
啊,好的。是的,這是有道理的。 – 2012-04-17 18:51:24
1
我會盡量避免擴展/修改本機對象的行爲。
在團隊環境中進行開發至少是有意義的。
很簡單,因爲,幾個月後,另一個開發人員編寫的代碼的另一個獨立的片沒有立即去識別改變行爲,除非某個文件,並開始他的任務之前作出意識到這一點。
相反,我建議封裝/「命名空間」 -ing所有這些功能,有人可能會選擇或不使用修改過的函數。
此外,本機對象及其方法已針對廣泛的情況進行了全面測試。所以你必須在修改本地功能之前完全確定你正在做什麼。
5
有由安德魯·杜邦這部影片從2011年JSConf關於這個的大討論。 http://blip.tv/jsconf/jsconf2011-andrew-dupont-everything-is-permitted-extending-built-ins-5211542
基本上要點是:
- 不要延長
Object.prototype
- 有些人可能想延長東西,有的人不
- 你需要知道你在做什麼
- 不要使用擴展的東西兩個庫,因爲它可以是壞的
- 擴展原型添加標準功能幾乎總是好的。
相關問題
- 1. Prototype如何擴展對象?
- 2. 如何在Firefox擴展中使用Prototype?
- 3. 可以Prototype擴展SVG元素嗎?
- 4. 如何使用jQuery擴展來擴展json對象?
- 5. 如何使用'prototype'擴展IXMLDOMElement?
- 6. 在Node.js中擴展本地JS對象?
- 7. 嵌套對象的JQuery擴展 - 在擴展上設置道具也改變了原來的擴展對象
- 8. JavaScript - 使用對象原型來擴展方法的用法?
- 9. 我可以使用自己的擴展方法來刪除對象嗎?
- 10. 擴展Symfony2用戶對象
- 11. 在Ruby中擴展對象
- 12. 如何正確擴展JS對象?
- 13. node.js正確擴展json對象
- 14. HTMLCollection對象擴展?
- 15. Java「擴展」對象
- 16. 擴展JavaScript對象
- 17. 擴展CakeRequest對象
- 18. 擴展DOMElement對象
- 19. 我可以使用+/-等擴展對象嗎?
- 20. uiselector類可以擴展爲使用UI對象的ID嗎?
- 21. 使用JavaScript擴展數學對象
- 22. 使用Object.create擴展原生JavaScript對象
- 23. 使用對象包裝來擴展JavaScript DOM?
- 24. 使用reduce來將源對象的枚舉屬性擴展到目標對象
- 25. 一個對象可以在scala中擴展抽象類嗎?
- 26. 擴展本地對象的工廠/類
- 27. 擴展JavaScript的文本對象
- 28. 如何修改本機Javascript對象的(prototype?)方法?
- 29. 使用擴展React.Component機制
- 30. 帶Prototype API的免費疊加擴展?
這是一些值得一個完全有效的問題,海事組織。它不應該被關閉。 – 2012-04-17 18:50:40
http://stackoverflow.com/faq#dontask說它不是。 – vascowhite 2012-04-17 19:33:59
基本上一個dup http://stackoverflow.com/questions/8859828/javascript-what-dangers-are-in-extending-array-prototype/8859941#8859941 – 2012-04-17 19:54:13