Baseline Widely available
СвойÑÑво new.target
позволÑÐµÑ Ð¾Ð¿ÑеделиÑÑ Ð±Ñла ли ÑÑнкÑÐ¸Ñ Ð¸Ð»Ð¸ конÑÑÑÑкÑÐ¾Ñ Ð²ÑÐ·Ð²Ð°Ð½Ñ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¾Ð¿ÐµÑаÑоÑа new. РконÑÑÑÑкÑоÑаÑ
и ÑÑнкÑиÑÑ
инÑÑанÑииÑованнÑÑ
Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¾Ð¿ÐµÑаÑоÑа new, new.target
возвÑаÑÐ°ÐµÑ ÑÑÑÐ»ÐºÑ Ð½Ð° конÑÑÑÑкÑÐ¾Ñ Ð¸Ð»Ð¸ ÑÑнкÑиÑ. ÐÑи обÑÑном вÑзове ÑÑнкÑии new.target
Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение undefined
.
СинÑакÑÐ¸Ñ new.target
ÑоÑÑÐ¾Ð¸Ñ Ð¸Ð· клÑÑевого Ñлова new
, ÑоÑки, и ÑвойÑÑва target
. ÐбÑÑно new
ÑлÑÐ¶Ð¸Ñ ÐºÐ¾Ð½ÑекÑÑом Ð´Ð»Ñ Ð´Ð¾ÑÑÑпа к ÑвойÑÑвÑ, но здеÑÑ new
не ÑовÑем обÑекÑ. Ðднако пÑи вÑзове конÑÑÑÑкÑоÑа, new.target
ÑÑÑлаеÑÑÑ Ð½Ð° конÑÑÑÑкÑÐ¾Ñ Ð²ÑзваннÑй Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ new
и Ñаким обÑазом new
ÑÑановиÑÑÑ Ð²Ð¸ÑÑÑалÑнÑм конÑекÑÑом.
СвойÑÑво 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");
}
new Foo(); // вÑÐ²ÐµÐ´ÐµÑ "Foo instantiated with new"
Foo(); // оÑибка "Foo() must be called 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(); // веÑнÑÑ "A"
var b = new B(); // веÑнÑÑ "B"
СпеÑиÑикаÑии СовмеÑÑимоÑÑÑ Ñ Ð±ÑаÑзеÑами СмоÑÑиÑе Ñакже
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4