定義Javascript 原型:兩種方法的比較
在Javascript 中定義原型時,開發人員有兩個主要選擇:使用命名函數表達式或物件文字賦值。這些方法有不同的用途,對原型成員的繼承有不同的影響。
選項 1:命名函數表達式
Person.prototype.sayName = function(name) { alert(name); }
此語法擴展了現有的原型物件透過新增一個名為 sayName 的新屬性。如果 Person 類別的實例已經存在,它們將繼承這個新方法。但是,預先存在的原型成員不受影響。
選項 2:物件文字賦值
Person.prototype = { sayName: function(name) { alert(name); } }
與選項 1 不同,此方法以新的物件字面量。因此,任何預先存在的原型成員都會遺失,包括預設的構造函數。如果已經有類別的實例依賴這些成員,這可能會導致意外的行為。
功能差異
兩種方法之間的主要功能差異是Option 1修改所有現有實例的原型,而選項2僅影響之後創建的實例覆蓋。
選擇一個而不是另一個的好處
選項1 被認為更乾淨、更有效率,因為它允許有針對性地擴展原型物件而不改變其現有的成員。另一方面,選項 2 存在意外覆蓋重要原型函數的風險。
對於擴展外部或本地原型,建議使用選項 1,以避免意外後果。如果首選物件字面量語法,則可以使用 Object.assign() 或類似的實用函數來安全地擴展原型:
Object.assign(Person.prototype, { sayName: function(name) { alert(name); } });
以上是哪種 Javascript 原型定義方法比較好:命名函數表達式還是物件文字賦值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!