"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيف يمكنني الاتصال بمنشئ فئة ES6 بدون الكلمة الأساسية \"الجديدة\"؟

كيف يمكنني الاتصال بمنشئ فئة ES6 بدون الكلمة الأساسية \"الجديدة\"؟

تم النشر بتاريخ 2024-11-08
تصفح:614

How Can I Call an ES6 Class Constructor Without the \

استدعاء منشئي فئة ES6 بدون "جديد"

في ES6، الفئات عبارة عن سكر نحوي لوظائف المنشئ. عندما يتم استدعاء فئة بدون الكلمة الأساسية الجديدة، فإنها لا تقوم بإنشاء مثيل جديد للفئة. بدلاً من ذلك، فإنه يستدعي وظيفة منشئ الفئة مباشرةً.

ضع في اعتبارك الفئة التالية:

class Foo {
  constructor(x) {
    if (!(this instanceof Foo)) return new Foo(x);
    this.x = x;
  }
  hello() {
    return `hello ${this.x}`;
  }
}

إذا حاولنا استدعاء هذا الفصل بدون الكلمة الأساسية الجديدة، فسنحصل على خطأ:

Cannot call a class as a function

وهذا بسبب تصميم مُنشئي الفصل لإنشاء مثيلات جديدة للفئة. إن استدعائها بدون العامل الجديد يعادل استدعاء دالة عادية.

للسماح باستدعاء مُنشئ فئة بدون الكلمة الأساسية الجديدة، يمكننا استخدام مجموعة من دالة المُنشئ ووظيفة السهم كما يلي:

class Foo {
  constructor(x) {
    if (!(this instanceof Foo)) return new Foo(x);
    this.x = x;
  }
  hello() {
    return `hello ${this.x}`;
  }
}

const FooWithoutNew = () => new Foo(...arguments);

الآن، يمكننا استدعاء مُنشئ الفصل بدون الكلمة الأساسية الجديدة باستخدام FooWithoutNew:

FooWithoutNew("world").hello(); // "hello world"

ومع ذلك، من المهم ملاحظة أن هذا الأسلوب له بعض العيوب. أولاً، يتطلب الأمر إنشاء وظيفة منفصلة، ​​الأمر الذي قد يكون غير مريح. ثانيًا، إنه يكسر سلوك المنشئ المتمثل في إرجاع مثيل جديد.

بشكل عام، يوصى دائمًا باستدعاء منشئي الفئة باستخدام الكلمة الأساسية الجديدة من أجل الوضوح والاتساق.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3