get set 不能和value同时使用。那么就是说 get和set的时候都是在操作别人,不能操作自己。多了一个别人var book={}我想像中的用法:Object.defineProperty(book,"year",{
value:2014, get: function() { return this.year;
}, set: function(value) { this.year=value;
}
});这么多么节约内存啊。。操作的是自己,操作自己,操自己。。而现实是:目前的用法:var book = {
_year: 2014,
};
Object.defineProperty(book,"year",{ get: function() { return this._year;
}, set: function(value) { this._year=value;
}
});操作的是别人,操作别人,操别人。。如果key超级多,那么需要为每个key额外增加对应的操作器。。。var book = { _year1: 2014, _year2: 2014, _year3: 2014, _year4: 2014, _year5: 2014, _year6: 2014,
_year7: 2014,
... ....
};是不是不太合理。。? 能写个函数统一处理吧?能的话 也是多个函数啊。
1 回答

米琪卡哇伊
TA贡献1998条经验 获得超6个赞
set/get本来就是为了应对特殊情况而设定的东西,当然要操作别人
Object.defineProperty(book,"year",{ value:2014, get: function() { return this.year + 1; }, set: function(value) { this.year = value - 1; } });
好了,现在
year
这个属性又有它自己的值,还有自己的get/set
设置器,我们对它进行RHS查找的时候到底应该返回哪个?当然,在语言层面上当然可以设计成直接返回get
设置器的返回值,也不和现在的矛盾,但是它既有设置器又有自己的value
,这在逻辑上容易被混淆,个人觉得当然还是分开比较好,从这一点上来考虑我觉得这么设计并没有什么不妥。Lz这种想法大概是源自一种代码上洁癖?我其实也有,你的第二个例子这么使用起来确实怪怪的,对于
_year
这种内部的变量,假如js有私有变量
这种形式的变量的话,我们就能把_year
隐藏起来,大概Lz就不会有什么意见了,不知道我有没有猜中?
我见过的JS代码其实不多,不过需要模拟私有变量的情况,我一般都用闭包的方法:var book = new (function(){ _year = 2014; Object.defineProperty(this, "year", { get: function() { return _year; }, set: function(value) { _year = value; } }); })();
用这种方法模拟一个类,这个函数形成了个闭包,
_year
是内部的变量,外部访问不到,这样一来book
对象对外就只暴露了year
的接口,看起来比刚才那样是不是要好多了?如果key超级多,那么需要为每个key额外增加对应的操作器
这种情况的话,和你有超级多的属性有什么区别吗?那么多属性不一样要挨个赋值……
添加回答
举报
0/150
提交
取消