首頁 >web前端 >js教程 >為什麼覆蓋 Crockford 原型繼承模式中的巢狀物件會影響原型?

為什麼覆蓋 Crockford 原型繼承模式中的巢狀物件會影響原型?

DDD
DDD原創
2024-12-09 15:46:11174瀏覽

Why Does Overwriting Nested Objects in Crockford's Prototypal Inheritance Pattern Affect the Prototype?

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中文網其他相關文章!

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