代码是这样的function(){ window.Observer = function(data){ this.data=data; for(var key in this.data){ var val = this.data[key]; ---这里 this.walk(val,key); } }; Observer.prototype.walk = function(val,key){ Object.defineProperty(this.data,key,{ enumerable: true, configurable: true, get:function(){ return val; }, set:function(newValue){ val = newValue; --- 这里 } }) }; })() var app = new Observer({a:"a"}); console.info(app.data.a); app.data.a = "b"; console.info(app.data.a);然后输出为 a b;为什么通过val = newValue可以设置a属性的值?val难道是一个引用?如果val存的是地址,可是这样为什么又不行var a = {b:0}var val = a.b;
val = 1
//a.b仍然是0
1 回答
万千封印
TA贡献1891条经验 获得超3个赞
val不是引用,就是值 ,之所以通过val = newValue可以设置app.data.a的值,是因为这是个闭包,里面保存了val的值,所以获得app.data.a的值时,调用get方法,返回的也是val.
添加回答
举报
0/150
提交
取消
