Я думаю, что лучше вообще не использовать ключевое слово new
при работе в JavaScript.
Это потому, что если вы затем создадите экземпляр объекта без , используя новое ключевое слово (например: var user = User()
) по ошибке, * произойдут очень плохие вещи ... * причина в том, что в функции ( если создается без ключевого слова new
), this
будет ссылаться на глобальный объект , то есть window
...
Поэтому я предлагаю лучший способ использования объектов, подобных классу.
Рассмотрим следующий пример:
var user = function (props) {
var pObject = {};
for (p in props) {
(function (pc) {
pObject['set' + pc] = function (v) {
props[pc] = v;
return pObject;
}
pObject['get' + pc] = function () {
return props[pc];
}
})(p);
}
return pObject;
}
В приведенном выше примере я создаю новый объект внутри функции, а затем присоединяю геттеры и сеттеры к этому вновь созданному объекту.
Наконец, я возвращаю этот вновь созданный объект. Обратите внимание, что ключевое слово this
нигде не используется
Затем, чтобы «создать экземпляр» user
, я бы сделал следующее:
var john = user({name : 'Andreas', age : 21});
john.getname(); //returns 'Andreas'
john.setage(19).getage(); //returns 19
Лучший способ избежать попадания в ловушки - не создавать их в первую очередь ... В приведенном выше примере я избегаю ловушки для ключевого слова new
(, как я сказал неиспользование ключевого слова new
, когда оно должно использоваться, приведет к возникновению плохих вещей ) из-за без использования new
.