Я видел следующие три блока кода в качестве примеров шаблона модуля JavaScript. Каковы различия, и почему я должен выбрать один шаблон над другим?
Шаблон 1
function Person(firstName, lastName) {
var firstName = firstName;
var lastName = lastName;
this.fullName = function () {
return firstName + ' ' + lastName;
};
this.changeFirstName = function (name) {
firstName = name;
};
};
var jordan = new Person('Jordan', 'Parmer');
Шаблон 2
function person (firstName, lastName) {
return {
fullName: function () {
return firstName + ' ' + lastName;
},
changeFirstName: function (name) {
firstName = name;
}
};
};
var jordan = person('Jordan', 'Parmer');
Шаблон 3
var person_factory = (function () {
var firstName = '';
var lastName = '';
var module = function() {
return {
set_firstName: function (name) {
firstName = name;
},
set_lastName: function (name) {
lastName = name;
},
fullName: function () {
return firstName + ' ' + lastName;
}
};
};
return module;
})();
var jordan = person_factory();
Из того, что я могу сказать, сообщество JavaScript обычно похоже на лучший вариант 3. Как это отличается от первых двух? Мне кажется, что все три шаблона могут использоваться для инкапсуляции переменных и функций.
ПРИМЕЧАНИЕ: Этот пост на самом деле не отвечает на вопрос, и я не считаю его дубликатом.