نکات کلیدی
1. اشیاء جاوااسکریپت: بلوکهای سازنده زبان
یک شیء از ویژگیهای نامگذاری شدهای تشکیل شده است که مقادیر را ذخیره میکنند.
اشیاء در جاوااسکریپت بنیادی هستند. آنها به عنوان ظرفهایی برای دادهها و عملکردهای مرتبط عمل میکنند و شامل ویژگیها (دادهها) و متدها (توابع) هستند. اشیاء میتوانند با استفاده از سازندهها یا لیترالهای شیء ایجاد شوند. برای مثال:
// لیترال شیء
let person = {
name: "John",
age: 30,
greet: function() {
console.log("Hello!");
}
};
// تابع سازنده
function Person(name, age) {
this.name = name;
this.age = age;
}
let john = new Person("John", 30);
اشیاء در جاوااسکریپت پویا هستند و اجازه میدهند ویژگیها در زمان اجرا اضافه، تغییر یا حذف شوند. این انعطافپذیری اشیاء را به ابزاری قدرتمند برای سازماندهی و دستکاری دادهها در برنامههای جاوااسکریپت تبدیل میکند.
2. توابع: شهروندان درجه یک در جاوااسکریپت
توابع شهروندان درجه یک هستند: توابع اشیائی با ویژگیها و مقادیر هستند.
توابع به عنوان مقادیر یک مفهوم اصلی در جاوااسکریپت است. این به این معناست که توابع میتوانند:
- به متغیرها اختصاص داده شوند
- به عنوان آرگومان به توابع دیگر منتقل شوند
- از توابع بازگردانده شوند
- در ساختارهای داده ذخیره شوند
این انعطافپذیری الگوهای برنامهنویسی قدرتمندی مانند:
- توابع مرتبه بالا
- بازخوانیها
- بستهها
- ترکیب توابع
را ممکن میسازد. برای مثال:
// تابع به عنوان یک مقدار
let greet = function(name) {
console.log("Hello, " + name);
};
// تابع به عنوان آرگومان
function executeFunction(func, arg) {
func(arg);
}
executeFunction(greet, "John");
درک توابع به عنوان شهروندان درجه یک برای نوشتن کد جاوااسکریپت ایدئال و کارآمد ضروری است.
3. زنجیره پروتوتایپ: مکانیزم وراثت جاوااسکریپت
زنجیره پروتوتایپ روشی است که وراثت (یا همان وراثت پروتوتایپی) در جاوااسکریپت طراحی شده است.
وراثت پروتوتایپی رویکرد منحصر به فرد جاوااسکریپت به برنامهنویسی شیءگرا است. هر شیء در جاوااسکریپت دارای یک ویژگی مخفی [[Prototype]] است که به شیء دیگری اشاره میکند. این یک زنجیره از اشیاء را تشکیل میدهد که به عنوان زنجیره پروتوتایپ شناخته میشود.
جنبههای کلیدی زنجیره پروتوتایپ:
- اشیاء ویژگیها و متدها را از پروتوتایپ خود به ارث میبرند
- زنجیره در Object.prototype پایان مییابد
- استفاده بهینه از حافظه از طریق ویژگیهای مشترک را ممکن میسازد
- امکان افزودن پویا ویژگیها به تمام نمونههای یک نوع را فراهم میکند
مثال از وراثت پروتوتایپی:
function Animal(name) {
this.name = name;
}
Animal.prototype.speak = function() {
console.log(this.name + " makes a sound.");
};
let dog = new Animal("Dog");
dog.speak(); // "Dog makes a sound."
درک زنجیره پروتوتایپ برای بهرهگیری از قابلیتهای شیءگرای جاوااسکریپت و بهینهسازی عملکرد کد ضروری است.
4. حوزه و بستهها: مدیریت دسترسی به متغیرها
زنجیره حوزه قبل از فراخوانی یک تابع ایجاد میشود. به همین دلیل، میتوانیم بستهها را ایجاد کنیم.
حوزه در جاوااسکریپت دسترسی به متغیرها و توابع در کد را تعیین میکند. جاوااسکریپت سه نوع حوزه دارد:
- حوزه جهانی
- حوزه تابع
- حوزه بلوک (معرفی شده در ES6 با let و const)
زنجیره حوزه سلسله مراتبی از حوزهها است که جاوااسکریپت برای حل ارجاعات متغیرها استفاده میکند. بستهها از این زنجیره بهره میبرند و به توابع اجازه میدهند به متغیرهای حوزه بیرونی خود حتی پس از اتمام اجرای تابع بیرونی دسترسی داشته باشند.
بستهها برای:
- حفظ حریم خصوصی دادهها
- ایجاد کارخانههای تابع
- پیادهسازی الگوهای ماژول
قدرتمند هستند. مثال از یک بسته:
function counter() {
let count = 0;
return function() {
return ++count;
};
}
let increment = counter();
console.log(increment()); // 1
console.log(increment()); // 2
درک حوزه و بستهها برای نوشتن کد جاوااسکریپت قابل نگهداری و کارآمد ضروری است.
5. کلمه کلیدی 'this': مرجع وابسته به زمینه
مقدار this در زمان اجرا بر اساس زمینهای که تابع در آن فراخوانی میشود تعیین میشود.
'this' در جاوااسکریپت یک کلمه کلیدی ویژه است که به شیءی که یک متد بر روی آن فراخوانی میشود اشاره دارد، یا در حالت غیر سختگیرانه به شیء جهانی زمانی که در یک تابع استفاده میشود. مقدار 'this' در زمان اجرا تعیین میشود و میتواند بسته به نحوه فراخوانی یک تابع تغییر کند.
نکات کلیدی درباره 'this':
- در یک متد، 'this' به شیءی که متد به آن تعلق دارد اشاره دارد
- در یک تابع مستقل، 'this' به شیء جهانی (window در مرورگرها) اشاره دارد
- در یک هندلر رویداد، 'this' به عنصری که رویداد را دریافت کرده است اشاره دارد
- میتواند به صورت صریح با استفاده از call()، apply() یا bind() تنظیم شود
مثال از 'this' در زمینههای مختلف:
let obj = {
name: "John",
greet: function() {
console.log("Hello, " + this.name);
}
};
obj.greet(); // "Hello, John"
let greet = obj.greet;
greet(); // "Hello, undefined" (در حالت غیر سختگیرانه)
درک 'this' برای کار با جاوااسکریپت شیءگرا و مدیریت صحیح زمینه تابع ضروری است.
6. سازندههای شیء بومی: ابزارهای داخلی جاوااسکریپت
جاوااسکریپت 9 تابع سازنده بومی ارائه میدهد: Object()، Array()، String()، Number()، Boolean()، Function()، Date()، RegExp() و Error().
سازندههای داخلی پایهای برای ایجاد و کار با انواع مختلف اشیاء در جاوااسکریپت فراهم میکنند. این سازندهها متدها و ویژگیهایی ارائه میدهند که عملیاتهای رایج بر روی انواع دادههای مربوطه را تسهیل میکنند.
نکات کلیدی درباره سازندههای بومی:
- میتوانند با کلمه کلیدی 'new' برای ایجاد نمونههای شیء استفاده شوند
- متدهای پروتوتایپ برای تمام نمونهها ارائه میدهند
- اغلب معادلهای نحوی لیترال دارند (مثلاً {} برای new Object())
- برخی دارای هدف دوگانه هستند (مثلاً String() میتواند مقادیر اولیه یا اشیاء ایجاد کند)
مثالهایی از استفاده از سازندههای بومی:
let arr = new Array(1, 2, 3);
let str = new String("Hello");
let num = new Number(42);
let date = new Date();
در حالی که نحوی لیترال اغلب برای سادگی ترجیح داده میشود، درک این سازندهها برای بهرهگیری از قابلیتهای کامل آنها و کار با ویژگیهای شیءگرای جاوااسکریپت مهم است.
7. مقادیر اولیه در مقابل مقادیر پیچیده: درک انواع داده
مقادیر null و undefined مقادیر چنان سادهای هستند که نیازی به تابع سازنده یا استفاده از عملگر new برای ایجاد آنها به عنوان یک مقدار جاوااسکریپت ندارند.
جاوااسکریپت دو دسته از انواع داده دارد:
-
انواع اولیه:
- String
- Number
- Boolean
- Undefined
- Null
- Symbol (ES6)
- BigInt (ES11)
-
انواع پیچیده (اشیاء):
- Object
- Array
- Function
- Date
- RegExp
تفاوتهای کلیدی:
- مقادیر اولیه غیرقابل تغییر و به صورت مقداری ذخیره میشوند
- انواع پیچیده قابل تغییر و به صورت مرجعی ذخیره میشوند
- مقادیر اولیه دارای اشیاء بستهبندی هستند (به جز null و undefined)
- typeof برای مقادیر اولیه و اشیاء به صورت متفاوت عمل میکند
مثال از رفتار اولیه در مقابل پیچیده:
let a = "hello";
let b = a;
a = "world";
console.log(b); // "hello"
let objA = {prop: "hello"};
let objB = objA;
objA.prop = "world";
console.log(objB.prop); // "world"
درک این تفاوتها برای جلوگیری از اشتباهات رایج در برنامهنویسی جاوااسکریپت و بهینهسازی عملکرد کد ضروری است.
8. کار با آرایهها: ساختارهای داده چندمنظوره
یک آرایه لیستی مرتب از مقادیر است که معمولاً با هدف پیمایش از طریق مقادیر با شاخص عددی، که از شاخص صفر شروع میشود، ایجاد میشود.
آرایهها در جاوااسکریپت اشیاء چندمنظورهای هستند که برای ذخیره و دستکاری مجموعههای داده استفاده میشوند. آنها متدهای داخلی متعددی برای عملیاتهای رایج مانند افزودن، حذف و تبدیل عناصر ارائه میدهند.
ویژگیهای کلیدی آرایههای جاوااسکریپت:
- شاخصگذاری صفر
- میتوانند شامل انواع دادههای مختلط باشند
- طول پویا
- آرایههای پراکنده ممکن هستند (با فاصله در شاخصها)
- متدهایی برای پیمایش، دستکاری و تبدیل ارائه میدهند
عملیاتهای رایج آرایه:
let arr = [1, 2, 3];
arr.push(4); // افزودن به انتها
arr.unshift(0); // افزودن به ابتدا
arr.pop(); // حذف از انتها
arr.shift(); // حذف از ابتدا
arr.forEach(item => console.log(item)); // پیمایش
let doubled = arr.map(item => item * 2); // تبدیل
تسلط بر آرایهها برای دستکاری مؤثر دادهها و پیادهسازی الگوریتمها در جاوااسکریپت ضروری است.
9. شیء جهانی: محیط اجرای جاوااسکریپت
کد جاوااسکریپت، خود، باید درون یک شیء قرار گیرد. به عنوان مثال، هنگام نوشتن کد جاوااسکریپت برای محیط مرورگر وب، جاوااسکریپت درون شیء window قرار میگیرد و اجرا میشود.
شیء جهانی به عنوان محیط سطح بالا که در آن کد جاوااسکریپت اجرا میشود عمل میکند. در مرورگرها، این معمولاً شیء window
است، در حالی که در Node.js global
است.
نکات کلیدی درباره شیء جهانی:
- به عنوان حوزه جهانی عمل میکند
- اشیاء و توابع داخلی را میزبانی میکند
- میتواند به صورت ضمنی ارجاع شود (مثلاً setTimeout() به جای window.setTimeout())
- متغیرهای جهانی به ویژگیهای شیء جهانی تبدیل میشوند
- APIهای خاص محیط را فراهم میکند (مثلاً دستکاری DOM در مرورگرها)
مثال از کار با شیء جهانی:
// محیط مرورگر
window.myGlobalVar = "I'm global";
console.log(myGlobalVar); // "I'm global"
// محیط Node.js
global.myGlobalVar = "I'm global";
console.log(myGlobalVar); // "I'm global"
درک شیء جهانی برای مدیریت حالت جهانی، جلوگیری از تضاد نامگذاری و کار با ویژگیهای خاص محیط در برنامههای جاوااسکریپت ضروری است.
آخرین بهروزرسانی::
نقد و بررسی
کتاب روشنگری جاوااسکریپت نظرات متفاوتی را به خود جلب کرده و میانگین امتیاز آن ۳.۵۵ از ۵ است. برخی از خوانندگان این کتاب را به خاطر روشنسازی مفاهیم جاوااسکریپت، بهویژه برای مبتدیان و کسانی که از استفاده از کتابخانهها به توسعه نرمافزار منتقل میشوند، ستایش میکنند. منتقدان این کتاب را تکراری و بهطور بالقوه خطرناک میدانند به دلیل ارائه الگوهای ضدنمونه. این کتاب به خاطر سادگی و تمرکز بر اشیاء مورد تحسین قرار گرفته، اما به خاطر محتوای قدیمی و تکرار بیش از حد مورد انتقاد قرار میگیرد. بهطور کلی، این کتاب برای یادگیرندگان مبتدی تا متوسط جاوااسکریپت توصیه میشود، هرچند برخی پیشنهاد میکنند که آن را با منابع دیگر ترکیب کنند تا درک جامعتری حاصل شود.