2013-10-09 7 views
0

Если у меня есть приложение с кучей геттеров и сеттеров, то я думаю, что мне нужно использовать закрытие, чтобы сохранить значение сеттера, не так ли?Использование прототипа для определения геттера/сеттера

Вот что у меня есть до сих пор, но я думаю, что эти два метода должны возвращать функции (замыкания). Я не думаю, что я должен использовать 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()» и считайте, что нет никаких аргументов? –

+0

№ Возвращаемая функция действует как любая другая функция, только разница в том, что она имеет доступ к переменной данных. Закрытие возвращает объект функции, а не выполняет его. – levi

+0

Хммм. Я получаю Uncaught TypeError: Не могу установить свойство «myFirstMethod» неопределенного. Я не понимаю, зачем здесь нужен IIFE. –

Смежные вопросы