مقایسه‌های شرطی تبدیل‌پذیر و کلاس‌های پروتوتایپی در جاوااسکریپت – درک دقیق رفتار شرطی و ساختارهای ارث‌بری

این مقاله دو موضوع مهم از ضمیمهٔ A کتاب YDKJSY را بررسی می‌کند: نحوهٔ تبدیل نوع در عبارات شرطی مانند if و while، و الگوی کلاس‌های پروتوتایپی به‌عنوان پیش‌زمینه‌ای برای کلاس‌های ES6. با مثال‌های عملی، تفاوت بین مقایسه‌های دقیق و تبدیل‌پذیر، و نحوهٔ تفویض رفتار از طریق زنجیرهٔ پروتوتایپ روشن می‌شود.

تبدیل-شرطیifObject.createکلاس-پروتوتایپی

~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!

در پشت‌صحنه، همان لینک پروتوتایپی برقرار است، اما نحو کلاس‌ها با الگوی شی‌گرا سازگارتر است.


جمع‌بندی


درک رفتار تبدیل‌پذیر در مقایسه‌های شرطی و شناخت الگوهای مختلف ساخت کلاس‌ها در جاوااسکریپت، پایه‌ای مهم برای نوشتن کدهای قابل‌پیش‌بینی و قابل‌نگهداری است. چه از کلاس‌های مدرن استفاده کنید، چه از الگوهای پروتوتایپی، مهم است که منطق پشت تفویض رفتار و ساختار حافظه را بشناسید.


نوشته و پژوهش شده توسط دکتر شاهین صیامی