在8.6.1 sec.,给出了命名访问者属性的属性。让我们创建名为accessor的属性,例如
var o=Object.create({},{bar:{get: function(){ return 10;},
set: function(value){ console.log("o.bar is", value)}}})
o.bar=550;
没关系。在控制台中我们有o.bar is 550
。但我有一些疑问。命名访问者属性没有value
属性。那么哪个属性被分配给550?
我们如何返回此指定值?我正在尝试重写get
函数,如下所示:
get: function(){ return value;}
但我有错误:
[15:59:41.418] ReferenceError: value is not defined @ http://fiddle.jshell.net/_display/:26
请解释我的命名访问者属性是如何工作的?
答案 0 :(得分:1)
命名的accesor属性没有value属性。那么哪个属性被分配给550?
没有,你必须在你的二传手中做到这一点。这不是自动完成的。
我们如何返回此指定值?
从你保存的任何地方。例如,为这个使用闭包是很常见的(为了清楚起见,我把它放在多行上):
var o=Object.create({},(function() {
var _bar = 10;
return {
bar:{
get: function(){
return _bar;
},
set: function(value){
_bar = value;
console.log("bar set to " + _bar);
}
}
};
})());
o.bar=550;
console.log("o.bar = " + o.bar);
简化版如果你遇到那种事情: - )
var o=Object.create({},(function() {
var _bar = 10;
return {bar:{get: function(){ return _bar; },
set: function(value){ _bar = value; console.log("bar set to " + _bar); }}};
})());
o.bar=550;
console.log("o.bar = " + o.bar);