خطاهای جاوا اسکریپت: Bad new optional

javascript errors bad new optional
19 آذر 1403

خطاهای JavaScript: Bad new optional


وقتی صحبت از JavaScript می‌شود، یکی از چالش‌های اصلی که برنامه‌نویسان ممکن است با آن مواجه شوند، خطاهای مختلفی است که در زمان اجرای کد اتفاق می‌افتند. یکی از این خطاها که ممکن است در فرآیند ساختن آبجکت‌ها با کلمه کلیدی new به وجود بیاید، خطای Bad new optional است. این خطا معمولاً به این معنی است که سعی کرده‌اید یک تابع خالی یا نادرست را با new فراخوانی کنید.


این خطا ممکن است بر اثر عدم تعریف درست تابع یا عدم وجود کلاس مورد نظر به وجود بیاید. برای حل این مشکل، مهم است که اطمینان حاصل کنید تابعی که با new فراخوانی می‌شود، به درستی تعریف شده باشد و حتماً یک آبجکت را بازگرداند. این نکته به ویژه در مورد توابعی که به صورت Arrow Function تعریف شده‌اند، اهمیت بیشتری پیدا می‌کند، زیرا Arrow Functionها نمی‌توانند به عنوان سازنده‌ها استفاده شوند.


برای رفع این مشکل، به جای استفاده از new، می‌توانید از رویکردهای دیگر برای ساخت آبجکت‌ها استفاده کنید. به عنوان مثال می‌توانید از Object.create استفاده کنید یا از یک تابع عادی به جای Arrow Function برای تعریف سازنده استفاده کنید. این موضوع باعث خواهد شد که کد شما از نظر ساختاری بهتر باشد و مشکلاتی مانند Bad new optional ایجاد نشود.


در زیر برخی از مثال‌ها و روش‌های متداول برای جلوگیری از این خطا را مرور خواهیم کرد. با یک مثال ساده شروع می‌کنیم که نشان می‌دهد چگونه می‌توانید یک آبجکت ساده را با استفاده از یک تابع سازنده تعریف کنید و سپس ببینیم چگونه می‌توانیم از استفاده نادرست از new جلوگیری کنیم.


function Person(name) {
this.name = name;
}

const john = new Person('جان');
console.log(john.name); // خروجی: جان

// حالا اگر بخواهیم از یک Arrow Function استفاده کنیم:
const PersonArrow = (name) => {
this.name = name;
};

const jane = new PersonArrow('جین'); // اینجا خطای Bad new optional به وجود می‌آید!

توضیح کد





  • function Person(name) { ... } این جزء یک تابع سازنده به نام Person است که یک پارامتر به نام name دریافت می‌کند و نام را به آبجکت اختصاص می‌دهد.

  • const john = new Person('جان'); در اینجا با استفاده از کلمه کلیدی new، یک آبجکت جدید به نام john از تابع سازنده Person ایجاد می‌کنیم.

  • console.log(john.name); // خروجی: جان این خط نام john را در کنسول چاپ می‌کند.

  • const PersonArrow = (name) => { ... } اینجا یک Arrow Function به نام PersonArrow تعریف شده است که مشابه تابع قبلی است.

  • const jane = new PersonArrow('جین'); اینجا تلاش می‌شود از new برای ایجاد یک آبجکت جدید استفاده شود که باعث به وجود آمدن خطای Bad new optional می‌شود.


سوالات متداول

؟

چرا با استفاده از new در Arrow Function خطا دریافت می‌کنم؟

؟

چگونه می‌توانم یک آبجکت بدون استفاده از new بسازم؟

؟

آیا همه توابع را می‌توان با new استفاده کرد؟

؟

چگونه می‌توانم از خطاهای جاوا اسکریپت جلوگیری کنم؟