Я склонен писать конструкторы объектов следующим образом:
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);
Здесь я в растерянности из-за важности техники.