گیرنده/گذارنده (Get / Set)
«گیرنده (Getter)» و «گذارنده (Setter)» یعنی راه های شیک برای خواندن و نوشتن ویژگی ها. مثل بازی که با دکمه ها، صدا را می خوانی یا تغییر می دهی. این کار تمیزتر است و کیفیت داده بهتر می شود.
Getter: خواندن مثل ویژگی
با کلیدواژه get، مقدار را مثل خاصیت می خوانی، نه تابع.
const person = {
firstName: "John",
lastName: "Doe",
language: "en",
get lang() {
return this.language;
}
};
// نمایش مقدار مانند ویژگی
// document.getElementById("demo").innerHTML = person.lang;
Setter: نوشتن با کنترل
با set، هنگام نوشتن می توانی مقدار را بررسی یا اصلاح کنی.
const person = {
firstName: "John",
lastName: "Doe",
language: "",
set lang(lang) {
this.language = lang;
}
};
person.lang = "en";
// document.getElementById("demo").innerHTML = person.language;
تابع یا Getter؟ تفاوت نگارشی
تابع پرانتز می خواهد؛ Getter مثل ویژگی بدون پرانتز است.
const person = {
firstName: "John",
lastName: "Doe",
fullName: function () {
return this.firstName + " " + this.lastName;
}
};
// استفاده به صورت تابع
// document.getElementById("demo").innerHTML = person.fullName();
const person = {
firstName: "John",
lastName: "Doe",
get fullName() {
return this.firstName + " " + this.lastName;
}
};
// استفاده مانند ویژگی
// document.getElementById("demo").innerHTML = person.fullName;
کیفیت داده: پاک سازی خودکار
می توانی حروف را یکدست کنی؛ مثلا همیشه بزرگ.
const person = {
firstName: "John",
lastName: "Doe",
language: "en",
get lang() {
return this.language.toUpperCase();
}
};
// document.getElementById("demo").innerHTML = person.lang;
const person = {
firstName: "John",
lastName: "Doe",
language: "",
set lang(lang) {
this.language = lang.toUpperCase();
}
};
person.lang = "en";
// document.getElementById("demo").innerHTML = person.language;
تعریف Getter/Setter با defineProperty
می توانی همین رفتار را با Object.defineProperty هم بسازی.
const obj = {
counter: 0
};
Object.defineProperty(obj, "reset", {
get: function () {
this.counter = 0;
}
});
Object.defineProperty(obj, "increment", {
get: function () {
this.counter++;
}
});
Object.defineProperty(obj, "decrement", {
get: function () {
this.counter--;
}
});
Object.defineProperty(obj, "add", {
set: function (value) {
this.counter += value;
}
});
Object.defineProperty(obj, "subtract", {
set: function (value) {
this.counter -= value;
}
});
obj.reset;
obj.add = 5;
obj.subtract = 1;
obj.increment;
obj.decrement;
هشدار: Getter سنگین ننویس. چون هر بار دسترسی اجرا می شود و کند می کند.
گام های تمرینی
- یک شی دانش آموز بساز و getter نام کامل بگذار.
- برای زبان، setter بگذار تا حروف بزرگ شود.
- با defineProperty شمارنده ایجاد کن و دکمه ها را تست کن.
ادامه مسیر: مدیریت ویژگی ها و حفاظت از شی. همچنین گیرنده/گذارنده (Get / Set) به عنوان مرجع سریع.
جمع بندی سریع
- Getter خواندن را ساده می کند.
- Setter نوشتن را کنترل می کند.
- تابع پرانتز می خواهد؛ Getter نه.
- می توانی داده را یکدست کنی.
- defineProperty گزینه انعطاف پذیر است.