--- title: new.target slug: Web/JavaScript/Reference/Operators/new.target translation_of: Web/JavaScript/Reference/Operators/new.target original_slug: Web/JavaScript/Referencje/Operatory/new.target ---
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 {{jsxref("undefined")}}.
new.target
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.
W normalnym wywołaniu funkcji (w przeciwieństwie do wywołania konstruktora), new.target
jest {{jsxref("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"
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"
Specification | Status | Comment |
---|---|---|
{{SpecName('ES6', '#sec-built-in-function-objects', 'Built-in Function Objects')}} | {{Spec2('ES6')}} | Initial definition. |
{{SpecName('ESDraft', '#sec-built-in-function-objects', 'Built-in Function Objects')}} | {{Spec2('ESDraft')}} |
{{CompatibilityTable}}
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Basic support | {{CompatChrome(46.0)}} | {{CompatGeckoDesktop(41)}} | {{CompatNo}} | {{CompatNo}} | {{CompatNo}} |
Feature | Android | Android Webview | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile | Chrome for Android |
---|---|---|---|---|---|---|---|
Basic support | {{CompatNo}} | {{CompatChrome(46.0)}} | {{CompatGeckoMobile(41)}} | {{CompatNo}} | {{CompatNo}} | {{CompatNo}} | {{CompatChrome(46.0)}} |