2013-11-09 5 views
1
$(document).ready(function() { 
    var patient = (function (options) { 
     var age = options.age; 
     var name = options.name; 

     function getName() { 
      return this.name; 
     } 

     function setName(val) { 
      name = val; 
     } 

     function getAge() { 
      return this.age; 
     } 

     function setAge(val) { 
      age = val; 
     } 
     return { 
      getAge: getAge, 
      setAge: setAge, 
      getName: getName, 
      setName: setName 
     } 
    })(); 
}); 

Я понимаю, что я никогда не передаю какие-либо варианты в моем примере здесь. Если я попытаюсь сделать что-то вроде patient.setAge('100'), а затем console.log(patient.getAge()) Я получаю сообщение об ошибке cannot read property Age of undefined. Основная тема, которую я пытаюсь найти, - это модуль, как я могу эмулировать константы для создания нового объекта пациента, сохраняя при этом всю доброту ООП частных переменных и весь этот джаз.Передача аргументов анонимной функции модуля

Я видел здесь несколько примеров конструкторов в модульном шаблоне, и я не очень хорошо их понял. Хорошо ли вообще иметь конструктор в модуле? Является ли его основная цель сходством с языками на основе классов?

+0

Там нет конструктора здесь ... почему бы вам не просто использовать? Частные переменные переоценены. :) – Ryan

+0

Я не уверен, как использовать конструктор внутри модуля - проблема, и мне интересно, как это сделать/если это действительно когда-либо необходимо или лучше. – wootscootinboogie

+0

Я пытался имитировать конструктор с передачей в объекте опций (но, очевидно, я не совсем понял что-то правильно. – wootscootinboogie

ответ

1

Это конструктор:

function Patient(options) { 
    options = options || {}; 

    this.age = options.age; 
    this.name = options.name; 
} 

$(document).ready(function() { 
    var patient = new Patient(); 
}); 

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

+0

Как вы это делаете? Я согласен, что getThis и setThat являются подробными, но я не знаю, как сделайте это jQuery способом. – wootscootinboogie

+0

Является ли конструктор внутри модуля или снаружи? Не так ли? – wootscootinboogie

+0

@wootscootinboogie: Нет никакого способа jQuery, нет волшебства, и не имеет значения, помещаете ли вы его внутри или вне модуля Если это часть вашего «модуля» (я не упоминал, что модули не существуют в JavaScript?), Продолжайте и помещайте его внутри. – Ryan

1

Попробуйте

function Patient (options) { 
     options = options || {}; 
     var age = options.age; 
     var name = options.name; 

     function getName() { 
      return name; 
     } 

     function setName(val) { 
      name = val; 
     } 

     function getAge() { 
      return age; 
     } 

     function setAge(val) { 
      age = val; 
     } 
     return { 
      getAge: getAge, 
      setAge: setAge, 
      getName: getName, 
      setName: setName 
     } 
    }); // pass empty object 

$(document).ready(function() { 
    var p1 = new Patient({}); 
    var p2 = new Patient(); 
    var p3 = new Patient({age:20}); 
    var p4 = new Patient({name:"abcd"}); 
    var p5 = new Patient({age:21, name:"abcd"}); 
}); 
+0

Это полезно знать, но это не позволит мне создать несколько объектов пациента, не так ли? – wootscootinboogie

+0

@wootscootinboogie Я сделал изменение в соответствии с вашими требованиями. теперь вы можете создать объект пациента столько, сколько хотите. также вы можете передать возраст и имя, как показано выше. – Anoop

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