Please note, this is a STATIC archive of website developer.mozilla.org from 03 Nov 2016, cach3.com does not collect or store any user information, there is no "phishing" involved.

new.target

Перевод не завершен. Пожалуйста, помогите перевести эту статью с английского.

Свойство new.target позволяет определить была ли функция или конструктор вызваны с помощью оператора new. В конструкторах и функциях инстанциированных с помощью оператора newnew.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

Смотрите также

Метки документа и участники

 Внесли вклад в эту страницу: Isk1n, uleming
 Обновлялась последний раз: Isk1n,