2012-10-15 38 views
1

屬性的直接訪問,我發現,很多JavaScript開發者創建一個簡單的返回屬性這樣的方法:方法,返回屬性VS在JavaScript

function Obj (prop) { 
    this.prop = prop; // public 
} 
Obj.prototype.getProp = function() { 
    return this.prop; 
}; 

雖然道具是公共的,可以這樣來訪問:

var a = obj.prop; 

此外,我發現,訪問對象屬性與方法比直接訪問它(在Firefox)

var a, b, 
    obj = new Obj(1); 

a = obj.prop; 
// ~6ns on Chrome 
// ~5ns on Firefox 

b = obj.getProp(); 
// ~6ns on Chrome (no difference) 
// ~730ns on Firefox (122x slower...) 
慢121倍

所以我的問題是:我們應該總是創建返回屬性的方法,或者我們可以直接訪問屬性嗎?那是反模式嗎?

回答

0

是的,它是一個反模式。由於JS沒有本地getter和setter方法,這將是跨瀏覽器,但是,你應該創建自己的getter和setter方法,如:

Obj.prototype.getProp = function() { 
    return this.prop; 
}; 

是的,你仍然可以直接訪問這個道具,但現在你不不得不。更多關於這一點。這樣,您就可以通過關閉創建私有屬性:

function Foo() { 
    var __yourPrivateProp = 'Bar'; 
    return { 
      getyourPrivateProp: function() { 
       return: __yourPrivateProp 
      } 
    }; 
} 
+1

*所有現代瀏覽器*支持定義getter和setter方法(使用['Object.defineProperty'](https://developer.mozilla.org/en-US/ docs/JavaScript/Reference/Global_Objects/Object/defineProperty#Browser_compatibility)以及較早的'__defineGetter__' /'__defineSetter__')。 –

+0

謝謝,我會試試看。 – neeh