我試圖解釋當我被一個事實證明這不能像我期望的那樣工作時,對原型繼承給同事的罕見用例。不應該分配給原型屬性在原型上重寫它嗎?
const baseobj = { baseproperty: 'original'};
const x = Object.create(baseobj);
//should add properties to x, not the base
x.newproperty = 'bar';
console.assert(x.newproperty != baseobj.newproperty);
//so far so good
//should modify the base, not x
x.baseproperty = 'foo';
console.assert(x.baseproperty == baseobj.baseproperty);
//this assert failed, property is on x!?
我很困惑。據我瞭解,分配是一個分兩步的過程,一個是查看屬性,另一個是分配給它。那麼爲什麼在查找baseproperty
不返回(因此修改)baseobj.baseproperty
?
我知道東西像這樣是angularjs範圍如何工作的關鍵,但具體是怎麼發生在這裏沒有我。
如果確實如此,那將會很糟糕。這意味着分配給一個屬性可能會隱含地改變碰巧具有相同原型的其他對象。最簡單的例子:'({})。toString = 42;'。 *每個*對象的'toString'屬性現在應該是'42'嗎? –
我不確定我是否知道您在Angular中的想法,但如果您發佈某種示例,這將會很有趣。 – Pointy