簡體   English   中英

寫入__proto__對象

[英]Writing to __proto__ object

說我有一個這樣的對象:

const obj1 = {foo:'bar'};

然后創建一個“副本”,( obj1現在是obj2原型 ):

const obj2 = Object.create(obj1);

如果我打電話

obj2.foo = 3;

要么

obj2.x = {};

我的問題是obj1會被寫入,還是永遠不會被寫入? 據我所知,只有頂層對象會被寫入-原型對象永遠不會被修改。

換句話說,在任何情況下我都應該設置屬性obj2,而obj1會被修改嗎?

如果直接像訪問Object.getPrototypeOf(obj2).foo = 3那樣訪問obj1可以將其編寫,但是不太可能故意這樣做。

如果在設計時沒有刻意繼承,則有可能obj1地寫入obj1 ,例如:

const obj1 = {
  get foo() { return obj1._foo },
  set foo(v) { obj1._foo = v}
}

const obj2 = Object.create(obj1);
obj2.foo = 3;

參照對象,而不是直接的this內部對象的方法是保持在遺留ES3 / ES5代碼適當的上下文的常用方法。

在任何情況下我都可以將屬性obj2設置為obj1嗎?

僅當obj1定義了由obj2繼承的setter屬性(然后實際發生什么取決於setter的實現)時。 否則,對obj2的屬性分配將始終在obj2本身上創建/更改屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM