2013-10-09 33 views
0

如果我有一堆getter和setter的應用程序,那麼我認爲我需要使用閉包來保持setter的值,不是嗎?使用原型來定義一個getter/setter

這是我到目前爲止,但我認爲這兩個方法應該返回函數(閉包)。我不認爲我應該使用this.local.result,因爲兩者會發生衝突。

myApplication = function(){ 
    this.local = {}; 
}; 
myApplication.prototype.myFirstMethod = function(){ 
    if (arguments.length) { 
     this.local.result = arguments[0]; 
    } else { 
     return this.local.result; 
    } 
}; 
myApplication.prototype.mySecondMethod = function(){ 
    if (arguments.length) { 
     this.local.result = arguments[0]; 
    } else { 
     return this.local.result; 
    } 
}; 

var app = new myApplication(); 
app.myFirstMethod(1); 
result = app.myFirstMethod(); 

console.log(result); 

回答

1

使用閉包的目的是保持變量私有(不能直接從全局範圍訪問)。

這裏是如何使用閉包:如果你不需要的數據是私有的

myApplication.prototype.myFirstMethod = (function() { 
    var data = ''; 
    return function() { 
     if (arguments.length) { 
      data = arguments[0]; 
     } else { 
      return data; 
     } 
    } 
})(); 

,你可以簡單地這樣做:

myApplication.prototype.myFirstMethod = function(){ 
    if (arguments.length) { 
     this.local['firstData'] = arguments[0]; 
    } else { 
     return this.local['firstData']; 
    } 
}; 
+0

但不會對參數的關鍵字混淆通過「return function()」並認爲有_never_任何參數? –

+0

不可以。返回的函數的作用與其他函數相同,區別在於它可以訪問數據變量。閉包返回函數對象,而不是執行它。 – levi

+0

嗯。我越來越未被捕獲TypeError:無法設置未定義的屬性'myFirstMethod'。我不明白在這裏需要一個IIFE。 –