new.target
الخاصية new.target
تسمح لك بمعرفة إن استدعيت دالةٌ عاديةٌ أم دالةٌ بانيةٌ باستخدام المعامل new
، ففي الدوال البانية التي تُهيَّئ باستخدام المعامل new
ستعيد الخاصية new.target
مرجعيةً إلى الدالة البانية، أما الدوال العادية فستكون قيمة الخاصية new.target
هي undefined
.
البنية العامة
new.target
الوصف
التعبير new.target
يحتوي على الكلمة المحجوزة new
ثم نقطة ثم اسم الخاصية target
، لاحظ أنَّ هذا الشكل قد يبدو من الوهلة الأولى على أنها وصولٌ إلى خاصيات أحد الكائنات، لن الكلمة المحجوزة 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
، وهذا ينطبق على الدالة البانية التي تكون في الصنف الأب التي استدعيت من الدالة البانية للصنف الابن:
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"
class C { constructor() { console.log(new.target); } }
class D extends C { constructor() { super(); } }
var c = new C(); // logs class C{constructor(){console.log(new.target);}}
var d = new D(); // logs class D extends C{constructor(){super();}}
لاحظ من المثال السابق في الصنفين C و D أنَّ الخاصية new.target
تُشير إلى تعريف الصنف الذي تمت تهيئته، فعند تهيئة الصنف D باستخدام المعامل new
فسيُعرَض تعريف الصنف D، والمثل ينطبق على الصنف C.
دعم المتصفحات
الميزة | Chrome | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
الدعم الأساسي | 46 | 41 | غير مدعومة | نعم | نعم |
على النقيض من متصفح IE، يدعم متصفح Edge هذه الميزة.
مصادر ومواصفات
- مسودة المعيار ECMAScript Latest Draft.
- معيار ECMAScript 2015 (6th Edition).