4
任何Javascript忍者或讀過ECMA-262 5th的人都會解釋以下行爲嗎?爲什麼通過點符號的javascript對象屬性賦值不會觸發爲該屬性定義的setter?
var obj = {
p: {},
set prop(val){
for (var key in val){
this.p[key] = "Set: " + val[key];
}
},
get prop(){
return this.p;
}
}
obj.prop = { // Assignment triggers setter
foo: "Foo"
}
obj.prop.bar = "Bar"; // Assignment does not trigger setter
console.log(obj.prop.foo); // Set: Foo
console.log(obj.prop.bar); // Bar
我發現上述行爲有點令人困惑,因爲我期望兩個賦值符號在功能上是等價的。
感謝您指出我答案中的錯誤。非常感激。你當然是非常正確的。 :-) – 2011-01-27 10:08:11