2012-08-30 94 views
2

我用javascript訪問性能打(我從零重新開始學習JavaScript的),試圖創建getter和setter一個簡單的對象,這裏的代碼:訪問者:二傳手不起作用

var dummy = { 
     name: 'empty', 
     description: 'static description', 

     get nameAccessor(){return 'name value is: ' + this.name;}, 
     set nameAccessor(value){ this.name = value;}, 

     get descAccessor(){return 'desccription value is: ' + this.description;}, 
}; 

console.log(dummy.nameAccessor); 
console.log(dummy.nameAccessor('Mazinga')); 
console.log(dummy.nameAccessor); 

但當它執行的setter代碼

Uncaught TypeError: Property 'nameAccessor' of object # is not a function

console.log(dummy.nameAccessor('Mazinga')); 

這是怎麼回事,它拋出一個錯誤這裏錯了嗎?

EDIT

好的,這似乎是不公知的JavaScript的特徵,布提隨後從 Javascript: Definitive Guide

var o = { 
      data_prop: value, 
      get accessor_prop() { /* function body here */ }, 
      set accessor_prop(value) { /* function body here */ } 
    }; 
+0

對象屬性始終可見。那裏不需要獲得者。你想要做的是使用一個函數並在return語句中公開一些變量。 – Christoph

回答

8

這個例子中存取器是不作爲一個屬性的函數的對象(「方法」),但是當該屬性爲assigned (set)retrieved (get)時會調用該函數。使用

dummy.nameAccessor = 'Mazinga'; 

來調用setter函數。

與此相反,dummy.nameAccessor('Mazinga')獲取屬性「nameAccessor」(它會生成名稱字符串),然後嘗試將其作爲函數調用,這將失敗。如果你的getter返回了一個函數,它會工作,但這不是你想要的。

+0

哇!我不知道這一點,謝謝你的回答 –

+0

輝煌!很多thx – avalanche1

0

dummy.nameAccessor不是函數,它是一個字符串name value is: empty

0

你的方法的語法不正確,請嘗試:

var dummy = { 

    name: 'empty', 
    description: 'static description', 

    getName : function(){return 'name value is: ' + this.name;}, 
    setName : function(value){ this.name = value;}, 
    getDesc : function(){return 'description value is: ' + this.description;} 

}; 
+0

不,語法是正確的。嘗試一下! – Bergi