new.target
pozwala sprawdzić czy konstruktor lub funkcja była zainicjalizowana używając operatora new. Kiedy w konstruktorze lub funkcji zainicjalizowany jest operatora new, new.target
zwraca referencje do konstruktora lub funkcji. W normalnym wywołaniu funkcji, new.target
jest undefined
.
Syntax
new.target
Opis
new.target
składa się ze słowa "new
", kropki i pola o nazwie "target"
. Przeważnie "new."
jest kontekstem dostępu do pola, ale w tym przypadku "new." nie jest tak naprawdę obiektem. W wywołaniu konstruktora, new.target
nawiązuje do konstruktora wywołanego przez new
więc "new.
" staje się wirtualnym kontekstem.
Pole new.target
jest meta polem które jest dostępne dla wszystkich funkcji. W arrow functions, new.target
nawiązuje do new.target
otaczającej funkcji.
Przykłady
new.target w wywołaniu funkcji
W normalnym wywołaniu funkcji (w przeciwieństwie do wywołania konstruktora), new.target
jest undefined
. Pozwala Ci to stwierdzić, czy funkcja została wywołana wraz z new jako konstruktor.
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 w konstruktorze
W konstruktorach klasy, new.target
nawiązuje do konstruktora który został bezpośrednio wywołany z new. Dzieje się tak również w przypadku kiedy konstruktor znajduje się w klasie rodzica, i został wywołany z konstruktorze dziecka.
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"
Specyfikacja
Specification | Status | Comment |
---|---|---|
ECMAScript 2015 (6th Edition, ECMA-262) The definition of 'Built-in Function Objects' in that specification. |
Standard | Initial definition. |
ECMAScript Latest Draft (ECMA-262) The definition of 'Built-in Function Objects' in that specification. |
Draft |
Kompatybilność przeglądarek
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Basic support | 46.0 | 41 (41) | No support | No support | No support |
Feature | Android | Android Webview | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile | Chrome for Android |
---|---|---|---|---|---|---|---|
Basic support | No support | 46.0 | 41.0 (41) | No support | No support | No support | 46.0 |