Person1
- это довольно стандартный тип функции конструктора объекта, предназначенный для вызова с new
. new Person1()
создает новый объект и создает метод sayHello
для этого объекта.
Person2
выполняется немедленно, что вызывает некоторые проблемы! При оценке Person2
функция вызывается (в глобальном контексте). Внутри выполнения этой функции this
будет объектом window
. Выполненная функция ничего не возвращает, поэтому Person2
оказывается неопределенным:
>>> Person2 = (function() { var FirstName = 'Hello' // ...}; })();
>>> console.log(window.sayHello, Person2);
function() undefined
A new Person2()
приводит к TypeError
"Person2 не конструктор" для меня. Если вы немного измените это, вы можете заставить замыкание Person2
возвращать объект с вашей функцией:
;Person2 = (function() {
var FirstName = 'Hello';
var LastName = 'World';
return {
sayHello: function() {
alert(FirstName + ' ' + LastName);
}
};
})();
Person2.sayHello();
Или сделать так, чтобы она возвращала функцию (чтобы вы могли new Person2()
):
;Person2 = (function() {
var FirstName = 'Hello';
var LastName = 'World';
return function() {
this.sayHello = function() {
alert(FirstName + ' ' + LastName);
};
};
})();