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

هل يمكنك الاتصال بمنشئ الفصل بدون \'جديد\' في ES6؟

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

 Can You Call a Class Constructor Without \'new\' in ES6?

استدعاء مُنشئ الفصل بدون كلمة رئيسية جديدة في ES6

بالنظر إلى تعريف الفصل:

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

لا يمكن الاتصال مباشرة بمنشئ الفصل بدون الكلمة الأساسية الجديدة. وذلك لأن الفئات في ES6 لها بطبيعتها وظيفة منشئة يتم استدعاؤها عند استدعاء الفئة.

استدعاء فئة بدون جديد يؤدي إلى خطأ:

Cannot call a class as a function

تشير رسالة الخطأ هذه بوضوح إلى أنه لا يمكن استدعاء مُنشئ الفئة إلا باستخدام عامل التشغيل الجديد، وهو مطلوب لإنشاء مثيل جديد للفئة.

للتغلب على هذا القيد، فكر في الأساليب التالية :

  • استخدم دالة عادية بدلاً من ذلك:
function Foo(x) {
  this.x = x;
  this.hello = function() {
    return `hello ${this.x}`;
  }
}
  • اتصل دائمًا بالفصل بكلمات جديدة:
(new Foo("world")).hello(); // "hello world"
  • لف الفصل في دالة واتصل بوظيفة جديدة:
var FooWrapper = function(...args) { return new Foo(...args) };
FooWrapper("world").hello(); // "hello world"
أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3