ÙÛÚÚ¯ÛâÙØ§Û Ø´ÛØ¡ د٠ÙÙØ¹ ÙØ³ØªÙد.
ÙÙØ¹ اÙÙ ÙÛÚÚ¯ÛâÙØ§Û دادÙâØ§Û ÙØ³ØªÙد. ٠ا از ÙØ¨Ù Ù ÛâØ¯Ø§ÙÛÙ ÚÚ¯ÙÙ٠با Ø¢ÙâÙØ§ کار Ú©ÙÛÙ . ت٠ا٠ÙÛÚÚ¯ÛâÙØ§ÛÛ Ú©Ù ØªØ§ ØØ§Ùا Ø§Ø³ØªÙØ§Ø¯Ù Ù ÛâکردÛÙ ÙÛÚÚ¯ÛâÙØ§Û دادÙâØ§Û Ø¨ÙØ¯Ùد.
ÙÙØ¹ دÙÙ ÙÛÚÚ¯ÛâÙØ§ ÚÛØ²Û Ø¬Ø¯ÛØ¯ است. اÛÙ ÙÙØ¹ ÙÛÚÚ¯ÛâÙØ§Û اکسسر(accessor) است. اساسا Ø¢ÙâÙØ§ تابعâÙØ§ÛÛ ÙØ³ØªÙد Ú©Ù Ø¨Ø±Ø§Û Ú¯Ø±ÙØªÙ Ù ØªÙØ¸ÛÙ âÚ©Ø±Ø¯Ù Ù ÙØ¯Ø§Ø±Û اجرا Ù ÛâØ´ÙÙØ¯ ا٠ا Ø¨Ø±Ø§Û ÛÚ© کد Ø®Ø§Ø±Ø¬Û Ù Ø§ÙÙØ¯ ÙÛÚÚ¯ÛâÙØ§Û ٠ع٠ÙÙÛ Ø¨Ù ÙØ¸Ø± Ù ÛâØ±Ø³ÙØ¯.
Ù ØªØ¯ÙØ§Û getter Ù setter
ÙÛÚÚ¯ÛâÙØ§Û اکسسر ØªÙØ³Ø· Ù
ØªØ¯ÙØ§Û âgetterâ Ù âsetterâ ÙÙ
Ø§ÛØ´ داد٠Ù
ÛâØ´ÙÙØ¯. در ÛÚ© Ø´ÛØ¡ ÙÛØªØ±Ø§ÙØ Ø§ÛÙ Ù
ØªØ¯ÙØ§ با get Ù set Ù
شخص Ù
ÛâØ´ÙÙØ¯.
let obj = {
get propName() {
// اجرا Ù
ÛâØ´ÙØ¯ obj.propName کد Ø¢Ù Ø¨Ø±Ø§Û Ø¯Ø±ÛØ§Ùت Øgetter
},
set propName(value) {
// اجرا Ù
ÛâØ´ÙØ¯ obj.propName = value کد Ø¢Ù Ø¨Ø±Ø§Û ØªÙØ¸ÛÙ
Øsetter
}
};
Ù
تد getter زÙ
اÙÛ Ú©Ù obj.propName Ø®ÙØ§Ùد٠Ù
ÛâØ´ÙØ¯ کار Ù
ÛâÚ©ÙØ¯Ø Ù
تد setter زÙ
اÙÛ Ú©Ù Ø§ÛÙ ÙÛÚÚ¯Û Ù
ÙØ¯Ø§Ø±Ø¯ÙÛ Ù
ÛâØ´ÙØ¯.
Ø¨Ø±Ø§Û Ù
Ø«Ø§ÙØ Ù
ا ÛÚ© Ø´ÛØ¡ user ØØ§ÙÛ name Ù surname دارÛÙ
:
let user = {
name: "John",
surname: "Smith"
};
ØØ§Ùا Ù
ÛâØ®ÙØ§ÙÛÙ
ÛÚ© ÙÛÚÚ¯Û fullName اضاÙÙ Ú©ÙÛÙ
Ú©Ù Ø¨Ø§ÛØ¯ "John Smith" باشد. ÙØ·Ø¹Ø§Ø ÙÙ
ÛâØªÙØ§ÙÛÙ
Ø§Ø·ÙØ§Ø¹Ø§Øª Ù
ÙØ¬Ùد را Ú©Ù¾ÛâÙ¾ÙÛØ³Øª Ú©ÙÛÙ
پس Ù
ÛâØªÙØ§ÙÛÙ
آ٠را ب٠عÙÙØ§Ù ÛÚ© اکسسر Ù¾ÛØ§Ø¯ÙâØ³Ø§Ø²Û Ú©ÙÛÙ
:
let user = {
name: "John",
surname: "Smith",
get fullName() {
return `${this.name} ${this.surname}`;
}
};
alert(user.fullName); // John Smith
از Ø¨ÛØ±ÙÙØ ÛÚ© ÙÛÚÚ¯Û Ø§Ú©Ø³Ø³Ø± Ù
اÙÙØ¯ ÙÛÚÚ¯ÛâØ§Û Ù
عÙ
ÙÙÛ Ø¨Ù ÙØ¸Ø± Ù
ÛâØ±Ø³Ø¯. اÛÙ Ø§ÛØ¯ÙâÛ ÙÛÚÚ¯ÛâÙØ§Û اکسسر است. Ù
ا user.fullName را ب٠عÙÙØ§Ù ÛÚ© تابع ÙØ±Ø§Ø®ÙاÙÛ ÙÙ
ÛâÚ©ÙÛÙ
بÙک٠آ٠را Ø¨Ù ØµÙØ±Øª Ø¹Ø§Ø¯Û Ø¯Ø±ÛØ§Ùت Ù
ÛâÚ©ÙÛÙ
:
از ØØ§Ùا Ø¨Ù Ø¨Ø¹Ø¯Ø fullName ÙÙØ· ÛÚ© getter دارد. اگر Ù
ا Ø¨Ø®ÙØ§ÙÛÙ
user.fullName را Ù
ÙØ¯Ø§Ø±Ø¯ÙÛ Ú©ÙÛÙ
Ø Ø§Ø±ÙØ± Ø§ÛØ¬Ø§Ø¯ Ù
ÛâØ´ÙØ¯:
let user = {
get fullName() {
return `...`;
}
};
user.fullName = "Test"; // (دارد getter ÙÛÚÚ¯Û ÙÙØ·) Ø§Ø±ÙØ±
Ø¨ÛØ§ÛÛØ¯ با اضاÙ٠کرد٠setter Ø¨Ø±Ø§Û user.fullName اÛÙ Ù
شک٠را برطر٠کÙÛÙ
:
let user = {
name: "John",
surname: "Smith",
get fullName() {
return `${this.name} ${this.surname}`;
},
set fullName(value) {
[this.name, this.surname] = value.split(" ");
}
};
// ÙÙ
را٠با Ù
ÙØ¯Ø§Ø± داد٠شد٠اجرا Ù
ÛâØ´ÙØ¯ set fullName
user.fullName = "Alice Cooper";
alert(user.name); // Alice
alert(user.surname); // Cooper
در ÙØªÛØ¬ÙØ Ù
ا ÛÚ© ÙÛÚÚ¯Û Â«Ù
جازÛÙ» fullName دارÛÙ
. ÙÙ
ÙØ§Ø¨Ù Ø®ÙØ§Ùد٠است Ù ÙÙ
ÙØ§Ø¨Ù ÙÙØ´ØªÙ.
ØªÙØµÛÙâÚ©ÙÙØ¯ÙâÙØ§Û اکسسر
ØªÙØµÛÙâÚ©ÙÙØ¯ÙâÙØ§Û ÙÛÚÚ¯ÛâÙØ§Û اکسسز ÙØ³Ø¨Øª Ø¨Ù ØªÙØµÛÙâÚ©ÙÙØ¯ÙâÙØ§Û ÙÛÚÚ¯ÛâÙØ§Û دادÙâØ§Û ØªÙØ§Ùت Ø¯Ø§Ø±ÙØ¯.
Ø¨Ø±Ø§Û ÙÛÚÚ¯ÛâÙØ§Û Ø§Ú©Ø³Ø³Ø±Ø value ÛØ§ writable ÙØ¬Ùد ÙØ¯Ø§Ø±Ø¯ اÙ
ا Ø¨Ù Ø¬Ø§Û Ø¢ÙâÙØ§ تابعâÙØ§Û get Ù set ÙØ¬Ùد دارد.
ÛØ¹ÙÛ Ø§ÛÙÚ©Ù ÛÚ© ØªÙØµÛÙâÚ©ÙÙØ¯Ù اکسسز ٠٠ک٠است اÛÙâÙØ§ را داشت٠باشد:
- Ù
تد
getâ ØªØ§Ø¨Ø¹Û بدÙ٠آرگÙÙ Ø§ÙØ ز٠اÙÛ Ú©Ù ÙÛÚÚ¯ÛâØ§Û Ø®ÙØ§ÙØ¯Ù Ø´ÙØ¯ کار Ù ÛâÚ©ÙØ¯Ø - Ù
تد
setâ ØªØ§Ø¨Ø¹Û با ÛÚ© آرگÙÙ Ø§ÙØ ز٠اÙÛ Ú©Ù ÙÛÚÚ¯Û Ù ÙØ¯Ø§Ø±Ø¯ÙÛ Ù ÛâØ´ÙØ¯ ÙØ±Ø§Ø®ÙاÙÛ Ù ÛâØ´ÙØ¯Ø - ÙÛÚÚ¯Û
enumerableâ ٠شاب٠ب٠ÙÛÚÚ¯ÛâÙØ§Û دادÙâØ§ÛØ - ÙÛÚÚ¯Û
configurableâ ٠شاب٠ب٠ÙÛÚÚ¯ÛâÙØ§Û دادÙâØ§ÛØ
Ø¨Ø±Ø§Û Ù
Ø«Ø§ÙØ Ø¨Ø±Ø§Û Ø§ÛØ¬Ø§Ø¯ اکسسر fullName با Ø§Ø³ØªÙØ§Ø¯Ù از definePropertyØ Ù
ÛâØªÙØ§ÙÛÙ
ØªÙØµÛÙâÚ©ÙÙØ¯ÙâØ§Û Ø´Ø§Ù
Ù get Ù set ÙØ±Ø§Ø± دÙÛÙ
:
let user = {
name: "John",
surname: "Smith"
};
Object.defineProperty(user, 'fullName', {
get() {
return `${this.name} ${this.surname}`;
},
set(value) {
[this.name, this.surname] = value.split(" ");
}
});
alert(user.fullName); // John Smith
for(let key in user) alert(key); // name, surname
ÙØ·Ùا در ÙØ¸Ø± Ø¯Ø§Ø´ØªÙ Ø¨Ø§Ø´ÛØ¯ Ú©Ù ÛÚ© ÙÛÚÚ¯Û ÛØ§ Ù
ÛâØªÙØ§Ùد اکسسر باشد (Ø¯Ø§Ø±Ø§Û Ù
ØªØ¯ÙØ§Û get/set است) ÛØ§ ÛÚ© ÙÛÚÚ¯Û Ø¯Ø§Ø¯ÙâØ§Û (ÛÚ© value دارد)Ø ÙÙ ÙØ± دÙ.
اگر Ù
ا ØªÙØ§Ø´ Ú©ÙÛÙ
Ú©Ù ÙÙ
get Ù ÙÙ
value را داخ٠ÛÚ© ØªÙØµÛÙâÚ©ÙÙØ¯Ù ÙØ±Ø§Ø± دÙÛÙ
Ø Ø§Ø±ÙØ± Ø§ÛØ¬Ø§Ø¯ Ù
ÛâØ´ÙØ¯:
// Ø§Ø±ÙØ±: ØªÙØµÛÙâÚ©ÙÙØ¯ÙâÛ ØºÛØ± ÙØ§Ø¨Ù ÙØ¨ÙÙ ÙÛÚÚ¯Û
Object.defineProperty({}, 'prop', {
get() {
return 1
},
value: 2
});
Ù ØªØ¯ÙØ§Û getter/setter ÙÙØ´Ù ÙØ¯ØªØ±
Ù ØªØ¯ÙØ§Û getter/setter Ù ÛâØªÙØ§ÙÙØ¯ ب٠عÙÙØ§Ù Ø¯Ø±Ø¨Ø±Ú¯ÛØ±ÙØ¯Ù Ø¨Ø±Ø§Û Ù ÙØ¯Ø§Ø± ÙÛÚÚ¯ÛâÙØ§Û Â«ÙØ§ÙعÛ» Ø§Ø³ØªÙØ§Ø¯Ù Ø´ÙÙØ¯ تا Ú©ÙØªØ±Ù Ø¨ÛØ´ØªØ±Û بر رÙÛ Ø¹Ù ÙÛØ§Øª با Ø¢ÙâÙØ§ داشت٠باشÛÙ .
Ø¨Ø±Ø§Û Ù
Ø«Ø§ÙØ اگر Ù
ا Ø¨Ø®ÙØ§ÙÛÙ
اسÙ
âÙØ§Û Ø®ÛÙÛ Ú©ÙØªØ§ÙâÙØ§ را Ø¨Ø±Ø§Û user Ù
Ù
ÙÙØ¹ Ú©ÙÛÙ
Ø Ù
ÛâØªÙØ§ÙÛÙ
ÛÚ© setter name داشت٠باشÛÙ
Ù Ù
ÙØ¯Ø§Ø± را درÙÙ ÙÛÚÚ¯Û Ø¬Ø¯Ø§Ú¯Ø§ÙÙâÛ _name Ø°Ø®ÛØ±Ù Ú©ÙÛÙ
:
let user = {
get name() {
return this._name;
},
set name(value) {
if (value.length < 4) {
alert("اسÙ
Ø®ÛÙÛ Ú©ÙØªØ§Ù Ø§Ø³ØªØ ØØ¯Ø§Ù٠ب٠4 کاراکتر ÙÛØ§Ø² دارد");
return;
}
this._name = value;
}
};
user.name = "Pete";
alert(user.name); // Pete
user.name = ""; // ...اسÙ
Ø®ÛÙÛ Ú©ÙØªØ§Ù است
پس اسÙ
در ÙÛÚÚ¯Û _name Ø°Ø®ÛØ±Ù شد٠است Ù Ø¯Ø³ØªØ±Ø³Û Ú¯Ø±ÙØªÙ ØªÙØ³Ø· getter Ù setter Ø§ÙØ¬Ø§Ù
Ù
ÛâÚ¯ÛØ±Ø¯.
از ÙØØ§Ø¸ ÙÙÛØ کد Ø¨ÛØ±ÙÙÛ Ù
ÛâØªÙØ§Ùد Ø¨Ù ØµÙØ±Øª Ù
ستÙÛÙ
با Ø§Ø³ØªÙØ§Ø¯Ù از user._name ب٠اسÙ
Ø¯Ø³ØªØ±Ø³Û Ù¾ÛØ¯Ø§ Ú©ÙØ¯. اÙ
ا ÛÚ© ÙØ±Ø§Ø±Ø¯Ø§Ø¯ Ø´ÙØ§Ø®ØªÙ Ø´Ø¯Ù ÙØ¬Ùد دارد Ú©Ù ÙÛÚÚ¯ÛâÙØ§ÛÛ Ú©Ù Ø¨Ø§ ÛÚ© Ø²ÛØ±Ø®Ø· (underscore) "_" Ø´Ø±ÙØ¹ Ù
ÛâØ´ÙÙØ¯Ø داخÙÛ ÙØ³ØªÙد Ù ÙØ¨Ø§Ûد Ø¨ÛØ±Ù٠از Ø´ÛØ¡ ب٠آÙâÙØ§ Ú©Ø§Ø±Û Ø¯Ø§Ø´Øª.
Ø§Ø³ØªÙØ§Ø¯Ù Ø¨Ø±Ø§Û Ø³Ø§Ø²Ú¯Ø§Ø±Û
ÛÚ©Û Ø§Ø² Ø¨ÙØªØ±ÛÙ Ú©Ø§Ø±Ø¨Ø±Ø¯ÙØ§Û Ø§Ú©Ø³Ø³Ø±ÙØ§ اÛ٠است ک٠آÙâÙØ§ ب٠٠ا اجاز٠٠ÛâØ¯ÙÙØ¯ ک٠در ÙØ± ز٠ا٠ÛÚ© ÙÛÚÚ¯Û Ø¯Ø§Ø¯ÙâØ§Û Â«Ù Ø¹Ù ÙÙÛ» را از طرÛ٠جاÛگزÛ٠کرد٠آ٠با ÛÚ© getter Ù ÛÚ© setter Ú©ÙØªØ±Ù Ú©ÙÛÙ Ù Ø±ÙØªØ§Ø± آ٠را تغÛÛØ± دÙÛÙ .
ØªØµÙØ± Ú©ÙÛØ¯ Ú©Ù Ù
ا Ø´Ø±ÙØ¹ Ø¨Ù Ù¾ÛØ§Ø¯ÙâØ³Ø§Ø²Û Ø´ÛØ¡ÙاÛÛ Ù
Ø±Ø¨ÙØ· ب٠کاربرا٠کردÛÙ
ک٠شاÙ
Ù ÙÛÚÚ¯ÛâÙØ§Û دادÙâØ§Û name Ù age ÙØ³ØªÙد:
function User(name, age) {
this.name = name;
this.age = age;
}
let john = new User("John", 25);
alert( john.age ); // 25
â¦Ø§Ù
ا Ø¯ÛØ± ÛØ§ Ø²ÙØ¯Ø ÙÙ
Ù ÚÛØ² Ù
Ù
ک٠است تغÛÛØ± Ú©ÙØ¯. Ø¨Ù Ø¬Ø§Û age Ù
Ù
ک٠است تصÙ
ÛÙ
Ø¨Ú¯ÛØ±ÛÙ
Ú©Ù birthday را Ø°Ø®ÛØ±Ù Ú©ÙÛÙ
ÚÙ٠دÙÛÙâØªØ± Ù Ù
ÙØ§Ø³Ø¨âتر است:
function User(name, birthday) {
this.name = name;
this.birthday = birthday;
}
let john = new User("John", new Date(1992, 6, 1));
ØØ§Ùا با کد ÙØ¯ÛÙ
Û Ú©Ù ÙÙÙØ² ÙÙ
از ÙÛÚÚ¯Û age Ø§Ø³ØªÙØ§Ø¯Ù Ù
ÛâÚ©ÙØ¯ Ú٠کار Ú©ÙÛÙ
Ø
Ù
ÛâØªÙØ§ÙÛÙ
ÚÙÛÙ Ø¬Ø§ÙØ§ÛÛ Ø±Ø§ در کد Ù¾ÛØ¯Ø§ ٠آÙâÙØ§ را درست Ú©ÙÛÙ
اÙ
ا اÛ٠کار زÙ
اÙâØ¨Ø± است ٠اگر آ٠کد ØªÙØ³Ø· Ø§ÙØ±Ø§Ø¯ دÛÚ¯Ø±Û Ø¯Ø± ØØ§Ù Ø§Ø³ØªÙØ§Ø¯Ù باشد Ù
Ù
ک٠است اÛ٠کار سخت Ø´ÙØ¯. Ù ÙÙ
ÚÙÛÙØ age ÚÛØ² Ø®ÙØ¨Û است ک٠در user داشت٠باشÛÙ
ÙÙØ
Ø¨ÛØ§ÛÛØ¯ آ٠را Ùگ٠دارÛÙ .
اضاÙ٠کرد٠ÛÚ© getter Ø¨Ø±Ø§Û age Ù
شک٠را ØÙ Ù
ÛâÚ©ÙØ¯:
function User(name, birthday) {
this.name = name;
this.birthday = birthday;
// از ØªØ§Ø±ÛØ® Ú©ÙÙÙÛ Ù ØªØ§Ø±ÛØ® تÙÙØ¯ Ù
ØØ§Ø³Ø¨Ù Ù
ÛâØ´ÙØ¯ age
Object.defineProperty(this, "age", {
get() {
let todayYear = new Date().getFullYear();
return todayYear - this.birthday.getFullYear();
}
});
}
let john = new User("John", new Date(1992, 6, 1));
alert( john.birthday ); // ÙØ§Ø¨Ù دسترس است birthday
alert( john.age ); // age درست Ù
اÙÙØ¯...
ØØ§Ùا کد ÙØ¯ÛÙ Û Ù٠کار Ù ÛâÚ©ÙØ¯ ٠٠ا ÛÚ© ÙÛÚÚ¯Û Ø§Ø¶Ø§ÙÛ Ø®ÙØ¨ Ú¯Ø±ÙØªÛÙ .
ÙØ¸Ø±Ø§Øª
<code>Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯Ø Ø¨Ø±Ø§Û ÚÙØ¯Û٠خط â کد را درÙ٠تگ<pre>ÙØ±Ø§Ø± دÙÛØ¯Ø Ø¨Ø±Ø§Û Ø¨ÛØ´ از د٠خط کد â Ø§Ø² ÛÚ© جعبÙÙ Ø´ÙÛ Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯. (plnkrØ jsbinØ codepenâ¦)