首頁 >web前端 >js教程 >Crockford 的原型繼承如何處理巢狀物件和屬性修改?

Crockford 的原型繼承如何處理巢狀物件和屬性修改?

DDD
DDD原創
2024-12-05 18:24:13529瀏覽

How Does Crockford's Prototypal Inheritance Handle Nested Objects and Property Modification?

Crockford 的原型繼承:嵌套物件的問題

Douglas Crockford 的原型繼承模式,在他的書《Javascript:The Good Parts》中概述,簡化了物件繼承並避免了與「new」關鍵字相關的混亂。但是,當嘗試使用此模式從嵌套物件繼承時,會出現一個問題:覆寫嵌套物件屬性會影響整個原型鏈。

考慮以下程式碼:

在此例如,從嵌套物件nestObj繼承後,更改person2中嵌套物件的屬性會影響原型nestObj,對於person3的巢狀物件也是如此。這是意想不到的行為,破壞了模式隔離單一物件變更的預期目的。

這種不一致的原因在於 JavaScript 物件繼承的基本性質。當一個物件從另一個物件繼承時,它會建立對該物件屬性的引用,而不是建立獨立的副本。這意味著對繼承屬性所做的任何變更都會反映在子物件和原型中。

為了避免此問題,必須在繼承巢狀屬性之前明確地為巢狀屬性建立一個新物件。這可確保對嵌套屬性的變更與子物件隔離。因此,正確的程式碼應該是:

以上是Crockford 的原型繼承如何處理巢狀物件和屬性修改?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn