Я обычно пишу конструкторы объектов следующим образом:
function Person(name) {
this.name = name;
}
Person.prototype.greet = function () {
alert("Hello! My name is " + this.name + ".");
};
Я заметил, что несколько библиотек и фреймворков JavaScript добавляют дополнительный код, например, так:
var Person = (function () {
function Person(name) {
this.name = name;
}
Person.prototype.greet = function () {
alert("Hello! My name is " + this.name + ".");
};
return Person;
})();
Я знаю, что такое самоисполняющийся анонимный функция выполняет и используется для. На данный момент я не вижу, какие преимущества или выгоды это дает при определении конструктора и его прототипа.
РЕДАКТИРОВАТЬ №1:
Я знаю шаблон модуля и его преимущества и довольно часто использую его в своем коде. Моя ошибка в общении заключалась в том, что не было ясно, что мой первый образец кода не должен находиться в глобальной области. Я всегда заключаю все свои внешние файлы JavaScript в самоисполняющуюся анонимную функцию, чтобы обеспечить локальную область видимости кода.
Например:
;(function ( window, undefined ) {
var p = function (name) {
this.name;
};
p.prototype.greet = function () {
alert("Hello! My name is " + this.name + ".");
};
window.Person = window.Person || p;
})(window);
Дело в том, что я видел, как техника, показанная во втором примере кода, использовалась в такой анонимной функции.
Например:
;(function ( window, undefined ) {
var p = (function () {
var q = function (name) {
this.name = name;
};
q.prototype.greet = function () {
alert("Hello! My name is " + this.name + ".");
};
return q;
})();
window.Person = window.Person || p;
})(window);
Здесь я не понимаю значения техники.