2013-08-02 70 views
3

我的問題:不熟悉的語法在JavaScript對象


    var nsPreferences = { 

    property1:"", 

    get mPrefService() 
     { 
      return Components.classes["@mozilla.org/preferences-service;1"] 
          .getService(Components.interfaces.nsIPrefBranch); 
     }, 

    setBoolPref: function (aPrefName, aPrefValue) 
     { 
      try 
      { 
       this.mPrefService.setBoolPref(aPrefName, aPrefValue); 
      } 
      catch(e) 
      { 
      } 
     }, 

    getBoolPref: function (aPrefName, aDefVal)// Prefs.jsで使用 
     { 
      try 
      { 
       return this.mPrefService.getBoolPref(aPrefName); 
      } 
      catch(e) 
      { 
       return aDefVal != undefined ? aDefVal : null; 
      } 
      return null;  // quiet warnings 
     }, 


    }; 

在這個對象nsPreferences,這是什麼 「讓mPrefService(){}」?這是我第一次在javascript對象中看到這種語法。有人會告訴我這個語法嗎?

+0

他們getter和setter方法:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects#Defining_getters_and_setters – Blender

+0

看看http://stackoverflow.com/questions/5409372/does-javascript-have-get-set-keywords-like-c –

+0

@ Blender,@ Ranjith R :是否等同於「***:function(){***; return ***;},」? 使用get語法有什麼優點,除了讓代碼更小? – user2640929

回答

2

這是一個getter function。它看起來像一個變量,當你讀它:

var someService = nsPreferences.mPrefService; 

它調用該函數,而不使用常規調用parens。您也可以使用set運營商爲同一屬性創建一個「二傳手」的作用:

set mPrefService(val){ 
    this.actualVal = val; 
}, 
nsPreferences.mPrefService = "service"; 
+0

ieyou can write like like alternative,can not you?: getmPrefService:function(){ return Components.classes [「@ mozilla.org/preferences-service;1」] .getService(Components.interfaces.nsIPrefBranch ); } – user2640929

+0

如果使用它,您需要'var someService = nsPreferences.getmPrefService();'來檢索該值。在最後注意'()',getter不使用它,但是常規函數需要它。 – bfavaretto