任何Javascript忍者或已阅读ECMA-262第5号护理的人解释以下行为?
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
我发现上述行为有点令人困惑,因为我预计这两个赋值符号在功能上是等价的。
答案 0 :(得分:5)
根本区别在于obj.prop = foo
正在改变prop
引用的obj
属性,而obj.prop.bar = "Bar"
只是改变obj.prop
对象的某些属性引用但不改变引用本身。