了解命名的访问者属性属性

时间:2013-12-19 14:45:30

标签: javascript

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

请解释我的命名访问者属性是如何工作的?

1 个答案:

答案 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);

Live Example | Source

简化版如果你遇到那种事情: - )

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);