Одно из преимуществ использования конструктора литералов объектов (вашего кода), которое еще не было указано, заключается в том, что при создании нового экземпляра объекта ключевое слово new
не обязательно. Иными словами, если вы просто забудете использовать ключевое слово new
, ваш код все равно будет работать так, как задумано, поскольку вы больше не полагаетесь на использование ключевого слова new
для определения области действия. this
вашему вновь созданному объекту в функции конструктора; Объект that
теперь позаботится о масштабах для вас.
Это подход, который библиотека YUI (и Дуглас Крокфорд) использует для конструкторов.
Рассмотрим следующий простой конструктор:
var Car = function(model){
this.model = model;
};
Если бы вы вызывали Car('Dodge Viper');
или даже var MyCar = Car('Dodge Viper');
, this
в функции фактически ссылался бы на глобальный window
объект. Так что теперь свойство Model
выше на самом деле является глобальной переменной, что, вероятно, не то, что предполагалось.
var Car = function(model) {
var that = {};
that.model = model;
return that;
};
// Both work the same.
var MamsCar = new Car("Mini Cooper"); // with 'new'
var DadsCar = Car("Bugatti Veyron"); // without 'new'
alert("Mam's car is a " + MamsCar.model + " and dad's car is a " + DadsCar.model);