Crockford 原型繼承模式中的嵌套物件問題
Douglas Crockford 的原型繼承模式是內建「新」模式的簡化替代方案JavaScript 中的關鍵字。但是,使用者在嘗試使用此模式從嵌套物件繼承時可能會遇到問題。
在此繼承模式中,目標對象的原型設定為另一個對象,繼承其屬性。如果目標物件中的嵌套屬性被覆蓋,則變更會沿著原型鏈一路向上傳播。此行為與嵌套物件的預期概念不一致。
考慮提供的範例:
var nestObj = { sex: "female", info: { firstname: "Jane", lastname: "Dough", age: 32, }, }; var person2 = Object.create(nestObj);
當屬性person2.info.age 被覆蓋時,它也會更改該物件的年齡原型中的嵌套物件(nestObj.info. age)。這可能是出乎意料的。
根據答案,這種行為並不是不一致。嵌套物件不被視為不同的實體。相反,它們要么是物件自己的屬性,要么是從原型繼承的。覆寫嵌套物件上的屬性值會影響自己的屬性和繼承的屬性。
要獨立變更巢狀屬性,必須為其指派新的物件參考。
person2.info = { firstname: "Jane", lastname: "Dough", age: 32, };
此建立一個獨立於原型的新巢狀物件。覆寫這個新物件的屬性不會影響原型。
以上是為什麼覆蓋 Crockford 原型繼承模式中的巢狀物件會影響原型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!