目前,我正在學習JavaScript的原型和繼承,我也遇到了MDN混淆短語「延長的Object.prototype或者其他內置的原型之一」
下面的段落我不完全確定作者的意思是extend Object.prototype or one of the other build-in prototype
。有人能澄清這個概念,最好是用代碼示例嗎?由於
目前,我正在學習JavaScript的原型和繼承,我也遇到了MDN混淆短語「延長的Object.prototype或者其他內置的原型之一」
下面的段落我不完全確定作者的意思是extend Object.prototype or one of the other build-in prototype
。有人能澄清這個概念,最好是用代碼示例嗎?由於
術語「內置原型」是指從標準對象繼承原型對象。這包括各種Error
S中的語言指定Boolean.prototype
,Number.prototype
,String.prototype
,Symbol.prototype
,Object.prototype
,Array.prototype
,Function.prototype
,Date.prototype
,與原型對象類型數組,數據結構((Weak-)地圖,集)和迭代器。
它也包括在環境中的其他本地原型對象,例如,DOM(Node.prototype
,Element.prototype
,Document.prototype
,...)和其他Web的API(例如XMLHttpRequest.prototype
)。
參見ES6中的definition of built-in objects和whole section about standard built-in objects。
一般來說,你不應該惹他們。它們是由環境提供的,它們不是你的 - 不要觸摸它們並在它們上面創建自己的方法。如果你想編寫模塊化,可互操作的代碼,你不應該依賴定製的內置插件的全局修改。有關更多討論,另請參閱Why is extending native objects a bad practice?。
除了Object
其他的事情,比如Array
和Function
,有原型了。由於MDN提到的原因,延長這些原型也被認爲是不好的做法。
它基本上意味着*「儘量不要添加任何東西到'Object.prototype'」*。例如'Object.prototype.buyMeAPony = function(){...}'是一個壞主意。其他內置原型也一樣 – Phil
哦,是的,這是有道理的。感謝您的評論 – Thor