~2 دقیقه مطالعه • بروزرسانی ۲۸ مهر ۱۴۰۴
مقدمه
جاوااسکریپت دارای رفتارهای خاصی در مقایسههای شرطی و ساختارهای شیگرا است. در این مقاله، دو موضوع مهم بررسی میشود: مقایسههای شرطی تبدیلپذیر و کلاسهای پروتوتایپی که پیشزمینهای برای کلاسهای مدرن ES6 هستند.
مقایسههای شرطی تبدیلپذیر
عبارات شرطی مانند if، while و ?: در JS بهصورت ضمنی مقادیر را به boolean تبدیل میکنند. این تبدیل نوع باعث میشود مقایسهها بهصورت تبدیلپذیر انجام شوند، نه دقیق.
مثال:
var x = 1;
if (x) { /* runs */ }
var x = "hello";
if (x) { /* runs */ }
if (x == true) { /* doesn't run */ }در واقع، شرط if (x) معادل if (Boolean(x) === true) است. بنابراین، تبدیل نوع به boolean قبل از مقایسه انجام میشود.
کلاسهای پروتوتایپی
قبل از معرفی class در ES6، الگوی رایج برای ساخت کلاسها استفاده از prototype بود. این الگو بهصورت زیر تعریف میشد:
function Classroom() {}
Classroom.prototype.welcome = function() {
console.log("Welcome, students!");
};
var mathClass = new Classroom();
mathClass.welcome(); // Welcome, students!تابع Classroom دارای شیء prototype است که متد welcome را نگه میدارد. شیء mathClass از طریق new ساخته شده و به Classroom.prototype لینک شده است.
الگوی سادهتر با Object.create
var Classroom = {
welcome() {
console.log("Welcome, students!");
}
};
var mathClass = Object.create(Classroom);
mathClass.welcome(); // Welcome, students!در این روش، شیء mathClass مستقیماً به Classroom لینک میشود و رفتار را از آن دریافت میکند.
کلاسهای مدرن ES6
با معرفی class در ES6، ساختار کلاسها خواناتر و منظمتر شد:
class Classroom {
constructor() {}
welcome() {
console.log("Welcome, students!");
}
}
var mathClass = new Classroom();
mathClass.welcome(); // Welcome, students!در پشتصحنه، همان لینک پروتوتایپی برقرار است، اما نحو کلاسها با الگوی شیگرا سازگارتر است.
جمعبندی
درک رفتار تبدیلپذیر در مقایسههای شرطی و شناخت الگوهای مختلف ساخت کلاسها در جاوااسکریپت، پایهای مهم برای نوشتن کدهای قابلپیشبینی و قابلنگهداری است. چه از کلاسهای مدرن استفاده کنید، چه از الگوهای پروتوتایپی، مهم است که منطق پشت تفویض رفتار و ساختار حافظه را بشناسید.
نوشته و پژوهش شده توسط دکتر شاهین صیامی