2013-12-19 93 views
0

8.6.1 sec.給出了命名訪問器屬性的屬性。讓我們創建命名訪問器屬性,如瞭解命名訪問器屬性

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

Named accesor property doesn't have value attribute. So which attribute is assigned to 550?

沒有,你必須在你的二傳手中這樣做。這不是自動完成的。

How we can return this assigned value?

無論你保存在哪裏。舉例來說,這是相當普遍使用封閉該(我把它放在多行清晰度)

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