В чем преимущество использования этого шаблона кодирования JavaScript для определения функций конструктора?

Я обычно пишу конструкторы объектов следующим образом:

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);

Здесь я не понимаю значения техники.

9
задан natlee75 17 February 2012 в 14:50
поделиться