Перевод не завершен. Пожалуйста, помогите перевести эту статью с английского.
new.target
позволяет определить была ли функция или конструктор вызваны с помощью оператора new. В конструкторах и функциях инстанциированных с помощью оператора new, new.target
возвращает ссылку на конструктор или функцию. При обычном вызове функции new.target
имеет значение undefined
.Синтаксис
new.target
Описание
Синтаксис new.target
состоит из ключевого слова"new
", точки, и свойства "target"
. Обычно "new."
служит контекстом для доступа к свойству, но здесь "new."
не совсем объект. Однако при вызове конструктора, new.target
ссылается на конструктор вызванный с помощью new
и таким образом "new.
" становится виртуальным контекстом.
Свойство new.target
это мета свойство которое доступно во всех функциях. В стрелочных функция, new.target
ссылается на new.target
внешней функции.
Примеры
new.target в вызове функции
При обычном вызове функции (в противоположность вызову в качестве конструктора), new.target
имеет значение undefined
. Так можно определить была ли вызвана функция как конструктор через new или нет.
function Foo() { if (!new.target) throw "Foo() must be called with new"; console.log("Foo instantiated with new"); } Foo(); // throws "Foo() must be called with new" new Foo(); // logs "Foo instantiated with new"
new.target в конструкторе
В конструкторе класса, new.target ссылается
на конструктор, который был непосредственно вызван new
. Это верно и для случая, когда new.target
находится в конструкторе родительского класса, а тот в свою очередь вызывается из конструктора дочернего класса.
class A { constructor() { console.log(new.target.name); } } class B extends A { constructor() { super(); } } var a = new A(); // logs "A" var b = new B(); // logs "B"
Спецификации
Спецификация | Статус | Комментарии |
---|---|---|
ECMAScript 2015 (6th Edition, ECMA-262) Определение 'Built-in Function Objects' в этой спецификации. |
Стандарт | Изначальное определение. |
ECMAScript 2017 Draft (ECMA-262) Определение 'Built-in Function Objects' в этой спецификации. |
Черновик |
Совместимость с браузерами
Возможность | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Базовая поддержка | 46.0 | 41 (41) | Нет | Нет | Нет |
Возможность | Android | Android Webview | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile | Chrome for Android |
---|---|---|---|---|---|---|---|
Базовая поддержка | Нет | 46.0 | 41.0 (41) | Нет | Нет | Нет | 46.0 |