Crockford 的原型繼承:嵌套物件的問題
Douglas Crockford 的原型繼承模式,在他的書《Javascript:The Good Parts》中概述,簡化了物件繼承並避免了與「new」關鍵字相關的混亂。但是,當嘗試使用此模式從嵌套物件繼承時,會出現一個問題:覆寫嵌套物件屬性會影響整個原型鏈。
考慮以下程式碼:
在此例如,從嵌套物件nestObj繼承後,更改person2中嵌套物件的屬性會影響原型nestObj,對於person3的巢狀物件也是如此。這是意想不到的行為,破壞了模式隔離單一物件變更的預期目的。
這種不一致的原因在於 JavaScript 物件繼承的基本性質。當一個物件從另一個物件繼承時,它會建立對該物件屬性的引用,而不是建立獨立的副本。這意味著對繼承屬性所做的任何變更都會反映在子物件和原型中。
為了避免此問題,必須在繼承巢狀屬性之前明確地為巢狀屬性建立一個新物件。這可確保對嵌套屬性的變更與子物件隔離。因此,正確的程式碼應該是:
以上是Crockford 的原型繼承如何處理巢狀物件和屬性修改?的詳細內容。更多資訊請關注PHP中文網其他相關文章!