Оператор new создает новый объект, используя функцию-конструктор, которая может быть как встроенной в javascript (Date, String), так и определенной пользователем.
Создание пользовательского объекта требует двух шагов:
- Объявить функцию-конструктор
- Инстанциировать (сделать экземпляр объекта) вызовом
new
После создания вы можете добавить к объекту любые свойства и удалить - почти любые, кроме ряда свойств встроенных javascript-объектов.
Оператор new также задает прототип объекта равным свойству prototype функции-конструктора. Подробнее - читайте про наследование в javascript.
А на что указывает this когда функция вызывается через оператор new? на global object?
указывает на поточный (данный) объект
Можно было сделать несколько примеров, а то переходить по ссылкам ради одного не совсем понятного примера!!!
// создаем функцию конструктор function Foo(name){ this.name = name; } // this внутри функции ссылается на window (даже при замыкании) Foo("js"); // в результате имеем name == "js"; // true // другими словами window.name == "js" // true // если создать экземпляр класса Foo, то this будет ссылаться на Foo var MyFoo = new Foo("css"); name == "js" // true window.name == "css" // false MyFoo.name == "css" // trueЕсли конструктор возвращает объект, то оператор new вернет именно его:
function X() { this.a = 1; return {}; // пустой объект } alert(JSON.stringify(X())); // {} alert(JSON.stringify(new X())); // {} function Y() { this.a = 1; return 2; // примитивное значение (не объект) } alert(JSON.stringify(Y())); // 2 alert(JSON.stringify(new Y())); // {"a":1} function Z() { this.a = 1; return new Number(2); // объект типа «число» } alert(JSON.stringify(Z())); // 2 alert(JSON.stringify(new Z())); // 2Правильно ли я понял, что использование оператора new влияет лишь на тип возвращаемого значения ( и только в частных случаях ) ?
Кто может подсказать почему следующий код работает и что это значит?
new (1, 2, 3, 0, function() {})