آیا میتوان یک مشخصهی رشته حرف اضافه کرد؟
کد زیر را در نظر بگیرید:
let str = "Hello";
str.test = 5;
alert(str.test);
فکر میکنید چطور کار خواهد کرد؟ چه چیزی نمایش داده خواهد شد؟
اجرا کنید:
let str = "Hello";
str.test = 5; // (*)
alert(str.test);
ممکن است دو نوع جواب وجود داشته باشد:
۱. تعریف نشده
۲. یک خطا
چرا؟ بگذارید دوباره ببینیم چه اتفاقی در خط (*)
میافتد:
۱. وفتی یک مشخصهی str
در دسترس قرار میگیرد، یک دربرگیرنده شئ ساخته میشود.
۲. عملوند به همراه مشخصه میآید. بنابراین شئ مشخصه test
را هم دارد.
۳. عملیات تمام میشود و دربرگیرنده شئ ناپدید میشود.
بنابراین، در خط آخر، str
هیچ نشانهای از مشخصه ندارد. یک شئ دربرگیرنده جدید برای هر عملوند شئ روی رشته حرف.
بعضی از مرورگرها حتی ممکن است تصمیم بگیرند که برنامهنویس را محدود کنند و اجازهی دسترسی به تخصیص مشخصهها به دادههای ابتدایی ندهند. به همین علت است که ما میتوانیم همچنین در عمل، خطا در خط (*)
را ببینیم. البته کمی دور از انتظار است.
این مثال به وضوح نشان میدهد که دادههای ابتدایی، شئ نیستند.
آنها نمیتوانند اطلاعات را ذخیره کنند.
تمامی عملوندهای توابع/مشخصهها با کمک اشیا موقتی انجام میشود.