خطاهای 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
میشود.