[英]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.