در ÙØµÙ اÙ٠اÛÙ Ø¨Ø®Ø´Ø Ø§Ø´Ø§Ø±Ù Ú©Ø±Ø¯ÛÙ Ú©Ù Ù ØªØ¯ÙØ§Û ٠درÙÛ Ø¨Ø±Ø§Û Ø±Ø§ÙâØ§ÙØ¯Ø§Ø²Û ÛÚ© Ù¾Ø±ÙØªÙتاÛÙ¾ ÙØ¬Ùد دارد.
ØªÙØ¸ÛÙ
Ú©Ø±Ø¯Ù ÛØ§ Ø®ÙØ§ÙØ¯Ù Ù¾Ø±ÙØªÙتاÛÙ¾ با obj.__proto__ ÙØ¯ÛÙ
Û Ù ØªØ§ ØØ¯Û Ù
ÙØ³ÙØ Ø¯Ø± ÙØ¸Ø± Ú¯Ø±ÙØªÙ Ù
ÛâØ´ÙØ¯ (ب٠بخش âØ¶Ù
ÛÙ
Ù Bâ Ø§Ø³ØªØ§Ùدارد Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±Ûپت جابجا Ø´Ø¯Ù Ø§Ø³ØªØ ÛØ¹ÙÛ ÙÙØ· Ø¨Ø±Ø§Û Ù
Ø±ÙØ±Ú¯Ø±Ùا است).
Ù ØªØ¯ÙØ§Û Ø¬Ø¯ÛØ¯ Ø¨Ø±Ø§Û Ø¯Ø±ÛØ§Ùت/ØªÙØ¸ÛÙ Ù¾Ø±ÙØªÙتاÛÙ¾ اÛÙâÙØ§ ÙØ³ØªÙد:
- Object.getPrototypeOf(obj) â
[[Prototype]]Ù Ø±Ø¨ÙØ· بÙobjرا بر٠ÛâÚ¯Ø±Ø¯Ø§ÙØ¯. - Object.setPrototypeOf(obj, proto) â
[[Prototype]]Ù Ø±Ø¨ÙØ· بÙobjرا رÙÛprotoÙØ±Ø§Ø± Ù ÛâØ¯ÙØ¯.
تÙÙØ§ Ø§Ø³ØªÙØ§Ø¯Ù __proto__Ø Ú©Ù ÙØ§Ù¾Ø³Ùد ÙÛØ³ØªØ Ø§Ø³ØªÙØ§Ø¯Ù از آ٠ب٠عÙÙØ§Ù ÛÚ© ÙÛÚÚ¯Û ÙÙگاÙ
Ø§ÛØ¬Ø§Ø¯ ÛÚ© Ø´ÛØ¡ است: {__proto__: ...}.
اگرÚÙ ÛÚ© ٠تد خاص Ø¨Ø±Ø§Û Ø§Û٠کار ÙÙ ÙØ¬Ùد دارد:
- Object.create(proto, [descriptors]) â ÛÚ© Ø´ÛØ¡ خاÙÛ Ø¨Ø§ ØªÙØ¸ÛÙ
protoداد٠شد٠ب٠عÙÙØ§Ù[[Prototype]]Ù ØªÙØµÛÙâÚ©ÙÙØ¯ÙâÙØ§Û ÙÛÚÚ¯Û Ø§Ø®ØªÛØ§Ø±Û Ø§ÛØ¬Ø§Ø¯ Ù ÛâÚ©ÙØ¯.
Ø¨Ø±Ø§Û Ù Ø«Ø§Ù:
let animal = {
eats: true
};
// ب٠عÙÙØ§Ù Ù¾Ø±ÙØªÙتاÛÙ¾ animal Ø§ÛØ¬Ø§Ø¯ ÛÚ© Ø´ÛØ¡ Ø¬Ø¯ÛØ¯ با
let rabbit = Object.create(animal); // است {__proto__: animal} با
alert(rabbit.eats); // true
alert(Object.getPrototypeOf(rabbit) === animal); // true
Object.setPrototypeOf(rabbit, {}); // ÙÙ
ÙÙ٠اÙÙÛÙ Ø®Ø±Ú¯ÙØ´ را ب٠{} تغÛÛØ± Ù
ÛâØ¯ÙØ¯
Object.create Ú©Ù
Û ÙØ¯Ø±ØªÙ
ÙØ¯ØªØ± است ÚÙÙ ÛÚ© آرگÙÙ
ا٠دÙÙ
Ø§Ø®ØªÛØ§Ø±Û دارد: ØªÙØµÛÙÚ¯Ø±ÙØ§Û ÙÛÚÚ¯Û.
٠ا Ù ÛâØªÙØ§ÙÛÙ ÙÛÚÚ¯ÛâÙØ§Û اضاÙÛ Ø±Ø§ Ø¨Ø±Ø§Û Ø´ÛØ¡ Ø¬Ø¯ÛØ¯ در Ø¢ÙØ¬Ø§ ارائ٠دÙÛÙ Ø Ù Ø§ÙÙØ¯ اÛÙ:
let animal = {
eats: true
};
let rabbit = Object.create(animal, {
jumps: {
value: true
}
});
alert(rabbit.jumps); // true
ØªÙØµÛÙÚ¯Ø±ÙØ§ ب٠ÙÙ Ø§Ù ÙØ§ÙØ¨Û ÙØ³ØªÙد ک٠در ÙØµÙ پرÚÙ âÙØ§Û ÙÛÚÚ¯Û Ù ØªÙØµÛÙâÚ©ÙÙØ¯ÙâÙØ§ ØªÙØ¶ÛØ Ø¯Ø§Ø¯Ù Ø´Ø¯.
Ù
ÛâØªÙØ§ÙÛÙ
از Object.create Ø¨Ø±Ø§Û Ø§ÙØ¬Ø§Ù
شبÛÙâØ³Ø§Ø²Û Ø´ÛØ¡ Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ
Ú©Ù Ø¨ÙØªØ± از Ú©Ù¾Û Ú©Ø±Ø¯Ù ÙÛÚÚ¯ÛâÙØ§ در for..in است:
let clone = Object.create(
Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj)
);
اÛÙ ÙØ±Ø§Ø®ÙاÙÛ ÛÚ© Ú©Ù¾Û ÙØ§Ùعا٠دÙÛ٠از obj Ù
ÛâØ³Ø§Ø²Ø¯Ø Ø´Ø§Ù
Ù ÙÙ
Ù ÙÛÚÚ¯ÛâÙØ§: ÙØ§Ø¨Ù Ø´Ù
ارش Ù ØºÛØ±Ùاب٠شÙ
Ø§Ø±Ø´Ø ÙÛÚÚ¯ÛâÙØ§Û Ø¯Ø§Ø¯Ù Ù ØªÙØ¸ÛÙ
âÚ©ÙÙØ¯ÙâÙØ§/Ø¯Ø±ÛØ§ÙتâÚ©ÙÙØ¯ÙâÙØ§ â ÙÙ
Ù ÚÛØ²Ø ٠با [[Prototype]] صØÛØ.
ØªØ§Ø±ÛØ®Ú٠٠ختصر
راÙâÙØ§Û Ø²ÛØ§Ø¯Û Ø¨Ø±Ø§Û Ù
Ø¯ÛØ±Ûت [[Prototype]] ÙØ¬Ùد دارد. ÚÚ¯ÙÙ٠اÛÙ Ø§ØªÙØ§Ù Ø§ÙØªØ§Ø¯Ø ÚØ±Ø§Ø
Ø§Ø±Ø«âØ¨Ø±Û Ù¾Ø±ÙØªÙتاÛÙ¾Û Ø§Ø² Ø²Ù Ø§Ù Ø§ÛØ¬Ø§Ø¯ زبا٠در Ø¢Ù ÙØ¬Ùد داشت ا٠ا راÙâÙØ§Û Ù Ø¯ÛØ±Ûت Ø¢Ù Ø·Û Ø²Ù Ø§Ù ÙÙ Ù Ú©Ø±Ø¯ÙØ¯.
- ÙÛÚÚ¯Û
"prototype"ÛÚ© تابع Ø³Ø§Ø²ÙØ¯Ù از ز٠اÙâÙØ§Û Ø¨Ø³ÛØ§Ø± ÙØ¯Û٠کار کرد٠است. اÛÙ ÙØ¯ÛÙ ÛâØªØ±ÛÙ Ø±Ø§Ù Ø¨Ø±Ø§Û Ø§ÛØ¬Ø§Ø¯ Ø´ÛØ¡ÙاÛÛ Ø¨Ø§ Ù¾Ø±ÙØªÙتاÛÙ¾ تعÛÛ٠شد٠است. - Ø¨Ø¹Ø¯Ø§ÙØ در سا٠2012Ø
Object.createدر Ø§Ø³ØªØ§ÙØ¯Ø§Ø±Ø¯ Ø¸Ø§ÙØ± شد. ØªÙØ§ÙاÛÛ Ø§ÛØ¬Ø§Ø¯ Ø´ÛØ¡Ùا با ÛÚ© Ù¾Ø±ÙØªÙتاÛÙ¾ داد٠شد٠را Ù ÛâØ¯ÙØ¯Ø ا٠ا ØªÙØ§ÙاÛÛ Ø¯Ø±ÛØ§Ùت/ØªÙØ¸Û٠آ٠را ÙØ±Ø§ÙÙ ÙÙ ÛâÚ©ÙØ¯. Ø¨ÙØ§Ø¨Ø±Ø§ÛÙ Ù Ø±ÙØ±Ú¯Ø±Ùا Ø¯Ø³ØªØ±Ø³Û ØºÛØ± Ø§Ø³ØªØ§ÙØ¯Ø§Ø±Ø¯__proto__را Ù¾ÛØ§Ø¯ÙâØ³Ø§Ø²Û Ú©Ø±Ø¯ÙØ¯ ک٠ب٠کاربر اجاز٠٠ÛâØ¯Ø§Ø¯ در ÙØ± ز٠ا٠ÛÚ© Ù¾Ø±ÙØªÙتاÛÙ¾ را Ø¯Ø±ÛØ§Ùت/ØªÙØ¸ÛÙ Ú©ÙØ¯. - Ø¨Ø¹Ø¯Ø§ÙØ در سا٠2015Ø
Object.setPrototypeOfÙObject.getPrototypeOfØ¨Ù Ø§Ø³ØªØ§ÙØ¯Ø§Ø±Ø¯ اضاÙÙ Ø´Ø¯ÙØ¯ تا ع٠ÙÚ©Ø±Ø¯Û Ù Ø´Ø§Ø¨Ù__proto__Ø¯Ø§Ø´ØªÙ Ø¨Ø§Ø´ÙØ¯. از Ø¢ÙØ¬Ø§ÛÛ Ú©Ù__proto__Ø¨Ù Ø·ÙØ± ع٠ÙÛ Ø¯Ø± ÙÙ ÙâØ¬Ø§ Ù¾ÛØ§Ø¯Ù Ø³Ø§Ø²Û Ø´Ø¯Ø Ø¨Ù ÙÙØ¹Û Ù ÙØ³ÙØ® شد ٠ب٠ض٠ÛÙ Ù B Ø§Ø³ØªØ§ÙØ¯Ø§Ø±Ø¯ Ø±Ø§Ù ÛØ§ÙØªØ ÛØ¹ÙÛ: Ø§Ø®ØªÛØ§Ø±Û Ø¨Ø±Ø§Û Ù ØÛØ·âÙØ§Û ØºÛØ± Ù Ø±ÙØ±Ú¯Ø±. - Ø¨Ø¹Ø¯Ø£Ø Ø¯Ø± سا٠2022Ø Ø§Ø³ØªÙØ§Ø¯Ù از
__proto__درÙÙ Ø´ÛØ¡ÙØ§Û ÙÛØªØ±Ø§Ù{...}Ø¨Ù Ø·ÙØ± Ø±Ø³Ù Û Ù Ø¬Ø§Ø² Ø¯Ø§ÙØ³ØªÙ شد (از ض٠ÛÙ Ù B خارج شد) ا٠ا Ù٠ب٠عÙÙØ§Ù Ø¯Ø±ÛØ§ÙتâÚ©ÙÙØ¯Ù/ØªÙØ¸ÛÙ âÚ©ÙÙØ¯Ùobj.__proto__(ÙÙÙØ² در ض٠ÛÙ Ù B است).
ÚØ±Ø§ تابعâÙØ§Û getPrototypeOf/setPrototypeOf جاÛگزÛÙ __proto__ Ø´Ø¯ÙØ¯Ø
ÚØ±Ø§ __proto__ ØªÙØ±Ûبا ØªÙØ§ÙâØ¨Ø®Ø´Û Ø´Ø¯Ù Ù Ø§Ø³ØªÙØ§Ø¯Ù از آ٠در {...} Ù
جاز شد اÙ
ا Ù٠ب٠عÙÙØ§Ù Ø¯Ø±ÛØ§ÙتâÚ©ÙÙØ¯Ù/ØªÙØ¸ÛÙ
âÚ©ÙÙØ¯ÙØ
Ø¨Ù Ø²ÙØ¯Û Ø¬ÙØ§Ø¨ را Ø®ÙØ§ÙÛÙ Ú¯Ø±ÙØª.
[[Prototype]] را در Ø§Ø´ÛØ§Ø¡ Ù
ÙØ¬Ùد تغÛÛØ± ÙØ¯ÙÛØ¯Ø¨Ù ØµÙØ±Øª تکÙÛÚ©ÛØ Ù
ا Ù
ÛâØªÙØ§ÙÛÙ
â[[Prototype]] را در ÙØ± زÙ
Ø§Ù Ø¯Ø±ÛØ§Ùت/ØªÙØ¸ÛÙ
Ú©ÙÛÙ
. اÙ
ا Ù
عÙ
ÙÙØ§ Ù
ا ÙÙØ· ÛÚ© بار در زÙ
ا٠ساخت Ø´ÛØ¡ ØªÙØ¸ÛÙ
Ù
ÛâÚ©ÙÛÙ
٠دÛگر آ٠را تغÛÛØ± ÙÙ
ÛâØ¯ÙÛÙ
: rabit از animal ارث Ù
ÛâØ¨Ø±Ø¯Ø Ù Ø§Û٠تغÛÛØ± ÙØ®Ùاد کرد.
Ù Ù
ÙØªÙØ±ÙØ§Û Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±Ûپت Ø¨Ø±Ø§Û Ø§Û٠کار Ø¨Ø³ÛØ§Ø± بÙÛÙ٠شدÙâØ§ÙØ¯. تغÛÛØ± ÛÚ© ÙÙ
ÙÙ٠اÙÙÛÙ âon-the-flyâ Ø¨Ø§ Object.setPrototypeOf ÛØ§ obj.__proto__= ÛÚ© عÙ
ÙÛØ§Øª Ø¨Ø³ÛØ§Ø± Ú©ÙØ¯ است Ø²ÛØ±Ø§ بÙÛÙ٠سازÛâÙØ§Û داخÙÛ Ø¨Ø±Ø§Û Ø¹Ù
ÙÛØ§Øª Ø¯Ø³ØªØ±Ø³Û Ø¨Ù ÙÛÚÚ¯Û Ø´ÛØ¡ را شکست Ù
ÛâØ¯ÙØ¯. Ø¨ÙØ§Ø¨Ø±Ø§Û٠از Ø¢Ù Ø§Ø¬ØªÙØ§Ø¨ Ú©ÙÛØ¯Ø Ù
گر اÛÙک٠بداÙÛØ¯ در ØØ§Ù Ø§ÙØ¬Ø§Ù
ÚÙ Ú©Ø§Ø±Û ÙØ³ØªÛØ¯Ø ÛØ§ سرعت Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±Ûپت Ø§ØµÙØ§ Ø¨Ø±Ø§Û Ø´Ù
ا Ù
ÙÙ
ÙÛØ³Øª.
Ø§Ø´ÛØ§Ø¡ "Ø¨Ø³ÛØ§Ø± سادÙ".
ÙÙ Ø§ÙØ·Ùر Ú©Ù Ù ÛâØ¯Ø§ÙÛÙ Ø Ø§Ø´ÛØ§Ø¡ Ù ÛâØªÙØ§ÙÙØ¯ ب٠عÙÙØ§Ù آراÛÙâÙØ§Û Ø§ÙØ¬Ù ÙÛ Ø¨Ø±Ø§Û Ø°Ø®ÛØ±Ù Ø¬ÙØªâÙØ§Û Ú©ÙÛØ¯/Ù ÙØ¯Ø§Ø± Ø§Ø³ØªÙØ§Ø¯Ù Ø´ÙÙØ¯.
â¦Ø§Ù
ا اگر Ø¨Ø®ÙØ§ÙÛÙ
Ú©ÙÛØ¯ÙØ§Û Ø§Ø±Ø§Ø¦Ù Ø´Ø¯Ù ØªÙØ³Ø· کاربر را در Ø¢Ù Ø°Ø®ÛØ±Ù Ú©ÙÛÙ
(Ù
Ø«ÙØ§Ù ÛÚ© ÙØ±ÙÙÚ¯ ÙØºØª ÙØ§Ø±Ø¯ Ø´Ø¯Ù ØªÙØ³Ø· کاربر)Ø Ù
ÛâØªÙØ§ÙÛÙ
ÛÚ© Ø§Ø´Ú©Ø§Ù Ø¬Ø§ÙØ¨ را ببÛÙÛÙ
: ÙÙ
Ù Ú©ÙÛØ¯Ùا ب٠جز "__proto__" Ø¨Ù Ø®ÙØ¨Û کار Ù
ÛâÚ©ÙÙØ¯.
اÛ٠٠ثا٠را Ø¨Ø±Ø±Ø³Û Ú©ÙÛØ¯:
let obj = {};
let key = prompt("Ú©ÙÛØ¯ ÚÛØ³ØªØ", "__proto__");
obj[key] = "ÛÚ© Ù
ÙØ¯Ø§Ø±";
alert(obj[key]); // [object Object], not "ÛÚ© Ù
ÙØ¯Ø§Ø±"!
در اÛÙØ¬Ø§Ø اگر کاربر __proto__ را تاÛÙ¾ Ú©ÙØ¯Ø Ø§ÙØªØ³Ø§Ø¨ در خط 4 ÙØ§Ø¯ÛØ¯Ù Ú¯Ø±ÙØªÙ Ù
ÛâØ´ÙØ¯!
اÛÙ Ù
ÛâØªÙØ§Ùد ÙØ·Ø¹Ø§ Ø¨Ø±Ø§Û ÛÚ© ØºÛØ± ØªÙØ³Ø¹ÙâØ¯ÙÙØ¯Ù Ø´ÙÚ©Ù Ú©ÙÙØ¯Ù باشد اÙ
ا Ø¨Ø±Ø§Û Ù
ا Ø¨Ø³ÛØ§Ø± ÙØ§Ø¨Ù ÙÙÙ
است. ÙÛÚÚ¯Û __proto__ خاص است: Ø¨Ø§ÛØ¯ ÛÚ© Ø´ÛØ¡ ÛØ§ null باشد. ÛÚ© رشت٠ÙÙ
ÛâØªÙØ§Ùد ب٠ÛÚ© Ù¾Ø±ÙØªÙتاÛÙ¾ تبدÛÙ Ø´ÙØ¯. ب٠ÙÙ
Û٠دÙÛ٠است Ú©Ù Ø§ÙØªØ³Ø§Ø¨ ÛÚ© رشت٠ب٠__proto__ ÙØ§Ø¯ÛØ¯Ù Ú¯Ø±ÙØªÙ Ù
ÛâØ´ÙØ¯.
اÙ
ا Ù
ا ÙØµØ¯ Ø§Ø¬Ø±Ø§Û ÚÙÛÙ Ø±ÙØªØ§Ø±Û را ÙØ¯Ø§Ø´ØªÛÙ
Ø Ø¯Ø±Ø³Øª Ø§Ø³ØªØ Ù
ا Ù
ÛâØ®ÙØ§ÙÛÙ
Ø¬ÙØªâÙØ§Û Ú©ÙÛØ¯/Ù
ÙØ¯Ø§Ø± را Ø°Ø®ÛØ±Ù Ú©ÙÛÙ
Ø Ù Ú©ÙÛØ¯ با ÙØ§Ù
"__proto__" Ø¨Ù Ø¯Ø±Ø³ØªÛ Ø°Ø®ÛØ±Ù ÙØ´Ø¯Ù است. پس اÛÙ ÛÚ© اشکا٠است!
در اÛÙØ¬Ø§ Ø¹ÙØ§Ùب Ø¢Ù ÙØØ´ØªÙØ§Ú© ÙÛØ³Øª. اÙ
ا در Ù
ÙØ§Ø±Ø¯ دÛگر Ù
Ù
ک٠است Ù
ا Ø´ÛØ¡Ùا را Ø¨Ù Ø¬Ø§Û Ø±Ø´ØªÙâÙØ§ در obj Ø°Ø®ÛØ±Ù Ú©ÙÛÙ
٠سپس Ù¾Ø±ÙØªÙتاÛÙ¾ Ù
Ù
ک٠است ÙØ§Ùعا٠تغÛÛØ± Ú©ÙØ¯. در ÙØªÛØ¬ÙØ اجرا Ø¨Ù Ø±ÙØ´âÙØ§Û کاÙ
ÙØ§Ù ØºÛØ±Ù
ÙØªØ¸Ø±Ù اشتبا٠Ù
ÛâØ´ÙØ¯.
بدتر از Ø¢Ù â ٠ع٠ÙÙØ§Ù ØªÙØ³Ø¹Ù دÙÙØ¯Ú¯Ø§Ù Ø§ØµÙØ§Ù ب٠ÚÙÛ٠ا٠کاÙÛ Ùکر ÙÙ ÛâÚ©ÙÙØ¯. اÛ٠ا٠ر باعث Ù ÛâØ´ÙØ¯ تا Ù ØªÙØ¬Ù ÚÙÛÙ Ø§Ø´Ú©Ø§ÙØ§ØªÛ سخت Ù ØØªÛ Ø¢ÙÙØ§ را Ø¨Ù Ø¢Ø³ÛØ¨ Ù¾Ø°ÛØ±Û تبدÛÙ Ú©ÙØ¯Ø Ø¨Ù Ø®ØµÙØµ ز٠اÙÛ Ú©Ù Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±Ûپت در س٠ت Ø³Ø±ÙØ± Ø§Ø³ØªÙØ§Ø¯Ù Ù ÛâØ´ÙØ¯.
Ù
ÙØ§Ø±Ø¯ ØºÛØ±Ù
ÙØªØ¸Ø±Ù در زÙ
ا٠Ù
ÙØ¯Ø§Ø±Ø¯ÙÛ Ø¨Ù obj.toStringØ Ú©Ù ÛÚ© تابع درÙÙâØ³Ø§Ø®Øª است Ù
Ù
ک٠است رخ Ø¯ÙØ¯.
ÚÚ¯ÙÙÙ Ù Û ØªÙØ§ÙÛ٠از اÛ٠٠شک٠جÙÙÚ¯ÛØ±Û Ú©ÙÛÙ Ø
Ø§Ø¨ØªØ¯Ø§Ø Ù
ÛâØªÙØ§ÙÛÙ
Ø¨Ù Ø¬Ø§Û Ø§Ø´ÛØ§Ø¡ Ø³Ø§Ø¯ÙØ از Map Ø¨Ø±Ø§Û Ø°Ø®ÛØ±ÙâØ³Ø§Ø²Û Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ
Ø Ø³Ù¾Ø³ ÙÙ
Ù ÚÛØ² Ø®ÙØ¨ است.
let map = new Map();
let key = prompt("What's the key?", "__proto__");
map.set(key, "some value");
alert(map.get(key)); // "some value" (as intended)
â¦Ø§Ù
ا سÛÙØªÚ©Ø³ Object ب٠دÙÛÙ Ø®ÙØ§ØµÙâØªØ± Ø¨ÙØ¯ÙØ Ø®ÙØ´âØ¢ÛÙØ¯ØªØ± است.
Ø®ÙØ´âبختاÙ٠٠ا Ù ÛâØªÙØ§ÙÛ٠از Ø´ÛØ¡Ùا Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ ÚÙÙ Ø³Ø§Ø²ÙØ¯Ú¯Ø§Ù زبا٠دربار٠اÛ٠٠شک٠٠دتâÙØ§ Ù¾ÛØ´ Ùکر کردÙâØ§ÙØ¯.
ÙÙ
Ø§ÙØ·Ùر Ú©Ù Ù
ÛâØ¯Ø§ÙÛÙ
Ø __proto__ ÙÛÚÚ¯Û ÛÚ© Ø´ÛØ¡ ÙÛØ³ØªØ بÙÚ©Ù ÛÚ© ÙÛÚÚ¯Û Ø§Ú©Ø³Ø³Ø± ب٠Object.prototype است:
Ø¨ÙØ§Ø¨Ø±Ø§ÛÙØ اگر obj.__proto__ Ø®ÙØ§ÙØ¯Ù ÛØ§ ØªÙØ¸ÛÙ
Ø´ÙØ¯Ø Ú¯ÛØ±ÙدÙ/ØªÙØ¸ÛÙ
Ú©ÙÙØ¯Ù Ù
Ø±Ø¨ÙØ·Ù از Ù¾Ø±ÙØªÙتاÛÙ¾ Ø¢Ù ÙØ±Ø§Ø®ÙاÙÛ Ù
ÛâØ´ÙØ¯ Ù [[Prototype]] را Ù
ÛâÚ¯ÛØ±Ø¯.
ÙÙ
Ø§ÙØ·Ùر ک٠در Ø§Ø¨ØªØ¯Ø§Û Ø§Û٠بخش Ø¢Ù
ÙØ²Ø´Û Ú¯ÙØªÙ شد: __proto__ راÙÛ Ø¨Ø±Ø§Û Ø¯Ø³ØªØ±Ø³Û Ø¨Ù [[Prototype]] Ø§Ø³ØªØ Ø§ÛÙ Ø®ÙØ¯ [[Prototype]] ÙÛØ³Øª.
ØØ§Ù اگر ÙØµØ¯ داشت٠باشÛ٠از ÛÚ© Ø´ÛØ¡ ب٠عÙÙØ§Ù آراÛÙ Ø§ÙØ¬Ù ÙÛ Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛ٠٠از ÚÙÛÙ Ù Ø´Ú©ÙØ§ØªÛ Ø®ÙØ§Øµ Ø´ÙÛÙ Ø Ù ÛâØªÙØ§ÙÛ٠با ÛÚ© ترÙÙØ¯ Ú©ÙÚÚ© اÛ٠کار را Ø§ÙØ¬Ø§Ù دÙÛÙ :
let obj = Object.create(null);
// obj = { __proto__: null } :ÛØ§
let key = prompt("Ú©ÙÛØ¯ ÚÛØ³ØªØ", "__proto__");
obj[key] = "ÛÚ© Ù
ÙØ¯Ø§Ø±";
alert(obj[key]); // "ÛÚ© Ù
ÙØ¯Ø§Ø±"
Object.create(null) ÛÚ© Ø´ÛØ¡ خاÙÛ ÙØ§Ùد Ù¾Ø±ÙØªÙتاÛÙ¾ Ø§ÛØ¬Ø§Ø¯ Ù
ÛâÚ©ÙØ¯ ([[Prototype]] برابر با null است):
Ø¨ÙØ§Ø¨Ø±Ø§ÛÙØ ÙÛÚ Ú¯ÛØ±ÙدÙ/ ØªÙØ¸ÛÙ
Ú©ÙÙØ¯Ù Ø§Ø±Ø«Û Ø¨Ø±Ø§Û __proto__ ÙØ¬Ùد ÙØ¯Ø§Ø±Ø¯. اکÙÙ٠ب٠عÙÙØ§Ù ÛÚ© ÙÛÚÚ¯Û Ø¯Ø§Ø¯Ù Ù
عÙ
ÙÙÛ Ù¾Ø±Ø¯Ø§Ø²Ø´ Ù
ÛâØ´ÙØ¯Ø Ø¨ÙØ§Ø¨Ø±Ø§ÛÙ Ù
Ø«Ø§Ù Ø¨Ø§ÙØ§ درست کار Ù
ÛâÚ©ÙØ¯.
ÚÙÛÙ Ø§Ø´ÛØ§ÛÛ Ø±Ø§ Ù
ÛâØªÙØ§ÙÛÙ
Ø§Ø´ÛØ§Ø¡ Â«Ø¨Ø³ÛØ§Ø± سادÙ» ÛØ§ Â«ÙØ±ÙÙÚ¯Û Ø®Ø§ÙØµÂ» Ø¨ÙØ§Ù
ÛÙ
Ø Ø²ÛØ±Ø§ Ø¢ÙÙØ§ ØØªÛ از Ø´ÛØ¡ ساد٠Ù
عÙ
ÙÙÛ {...} سادÙâØªØ± ÙØ³ØªÙد.
ÛÚ© ÙÙØ·Ù ضع٠اÛ٠است Ú©Ù ÚÙÛÙ Ø§Ø´ÛØ§ÛÛ ÙØ§Ùد ÙØ±Ú¯ÙÙÙ Ù
تد Ø´ÛØ¡ داخÙÛ ÙØ³ØªÙØ¯Ø Ø¨Ù Ø¹ÙÙØ§Ù Ù
ثاÙ. toString:
let obj = Object.create(null);
alert(obj); // (toString ÙØ¨Ùد) Ø§Ø±ÙØ±
⦠ا٠ا اÛ٠٠ع٠ÙÙØ§ Ø¨Ø±Ø§Û Ø¢Ø±Ø§ÛÙ ÙØ§Û Ø§ÙØ¬Ù ÙÛ Ø®ÙØ¨ است.
ØªÙØ¬Ù Ø¯Ø§Ø´ØªÙ Ø¨Ø§Ø´ÛØ¯ ک٠اکثر Ù
ØªØ¯ÙØ§Û Ù
رتبط با Ø´ÛØ¡Ø Object.something(...) ÙØ³ØªÙØ¯Ø Ù
اÙÙØ¯ Object.keys(obj) â Ø¢ÙÙØ§ در Ù¾Ø±ÙØªÙتاÛÙ¾ ÙÛØ³ØªÙØ¯Ø Ø¨ÙØ§Ø¨Ø±Ø§Û٠آÙÙØ§ ب٠کار بر رÙÛ ÚÙÛÙ Ø§Ø´ÛØ§ÛÛ Ø§Ø¯Ø§Ù
Ù Ù
ÛâØ¯ÙÙØ¯:
let chineseDictionary = Object.create(null);
chineseDictionary.hello = "ä½ å¥½";
chineseDictionary.bye = "åè§";
alert(Object.keys(chineseDictionary)); // hello,bye
Ø®ÙØ§ØµÙ
-
Ø¨Ø±Ø§Û Ø§ÛØ¬Ø§Ø¯ ÛÚ© Ø´ÛØ¡ با Ù¾Ø±ÙØªÙتاÛÙ¾ تعÛÛÙ Ø´Ø¯ÙØ از اÛÙâÙØ§ Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯:
- سÛÙØªÚ©Ø³ ÙÛØªØ±Ø§Ù:
{ __proto__: ...}Ø Ø§Ø¬Ø§Ø²Ù Ù ÛâØ¯ÙØ¯ Ú©Ù ÚÙØ¯ ÙÛÚÚ¯Û ØªØ¹ÛÛÙ Ú©ÙÛÙ - ÛØ§ Object.create(proto, [descriptors])Ø Ø§Ø¬Ø§Ø²Ù Ù ÛâØ¯ÙØ¯ Ú©Ù ØªÙØµÛÙâÚ©ÙÙØ¯ÙâÙØ§Û ÙÛÚÚ¯Û Ø±Ø§ تعÛÛÙ Ú©ÙÛÙ .
- سÛÙØªÚ©Ø³ ÙÛØªØ±Ø§Ù:
-
Ù ØªØ¯ÙØ§Û Ù Ø¯Ø±Ù Ø¨Ø±Ø§Û Ø¯Ø±ÛØ§Ùت/ØªÙØ¸ÛÙ Ù¾Ø±ÙØªÙتاÛÙ¾ اÛÙâÙØ§ ÙØ³ØªÙد:
- Object.getPrototypeOf(obj) â
[[Prototype]]را ازobjبر٠ÛâÚ¯Ø±Ø¯Ø§ÙØ¯ (Ù٠اÙÙØ¯ Ø¯Ø±ÛØ§ÙتâÚ©ÙÙØ¯Ù__proto__). - Object.setPrototypeOf(obj, proto) â
[[Prototype]]objرا رÙÛprotoØªÙØ¸ÛÙ Ù ÛâÚ©ÙØ¯ (Ù٠اÙÙØ¯ ØªÙØ¸ÛÙ âÚ©ÙÙØ¯Ù__proto__).
- Object.getPrototypeOf(obj) â
-
Ø¯Ø±ÛØ§Ùت/ØªÙØ¸ÛÙ Ù¾Ø±ÙØªÙتاÛÙ¾ با Ø§Ø³ØªÙØ§Ø¯Ù از
__proto__درÙÙâØ³Ø§Ø®Øª Ù¾ÛØ´ÙÙØ§Ø¯ ÙÙ ÛâØ´ÙØ¯ Ù Ù٠اکÙÙ٠در ز٠ÛÙÙ B ٠شخصات زبا٠است. -
ÙÙ ÚÙÛÙ Ø´ÛØ¡ÙØ§Û Ø¨Ø¯ÙÙ Ù¾Ø±ÙØªÙتاÛÙ¾ را Ù¾ÙØ´Ø´ دادÛ٠ک٠با
Object.create(null)ÛØ§{__proto: null}Ø§ÛØ¬Ø§Ø¯ Ù ÛâØ´ÙØ¯.اÛÙ Ø´ÛØ¡Ùا ب٠عÙÙØ§Ù ÙØ±ÙÙÚ¯ ÙØºØª Ø§Ø³ØªÙØ§Ø¯Ù Ù ÛâØ´ÙÙØ¯ تا ÙØ± Ú©ÙÛØ¯Û را Ø°Ø®ÛØ±Ù Ú©ÙÙØ¯ (Ø§ØØªÙ Ø§ÙØ§ Ú©ÙÛØ¯Û Ú©Ù ØªÙØ³Ø· کاربر تÙÙÛØ¯ Ø´ÙØ¯).
Ø¨Ù Ø·ÙØ± Ø·Ø¨ÛØ¹ÛØ Ø´ÛØ¡Ùا Ù ØªØ¯ÙØ§Û درÙÙâØ³Ø§Ø®Øª Ù
__proto__Ø¯Ø±ÛØ§ÙتâÚ©ÙÙØ¯Ù ÛØ§ ØªÙØ¸ÛÙ âÚ©ÙÙØ¯Ù را ازObject.prototypeØ§Ø±Ø«âØ¨Ø±Û Ù ÛâÚ©ÙÙØ¯ Ú©Ù Ú©ÙÛØ¯ÙØ§Û Ù ØªÙØ§Ø¸Ø± را «اشغاÙ» Ù ÛâÚ©ÙÙØ¯ Ù Ø§ØØªÙ Ø§ÙØ§ باعث Ø§ÛØ¬Ø§Ø¯ Ø¹ÙØ§Ø±Ø¶ Ø¬Ø§ÙØ¨Û Ù ÛâØ´ÙÙØ¯. با Ù¾Ø±ÙØªÙتاÛÙ¾nullØ´ÛØ¡ÙØ§Û Ø¯Ø± ØÙÛÙØª خاÙÛ ÙØ³ØªÙد.
ÙØ¸Ø±Ø§Øª
<code>Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯Ø Ø¨Ø±Ø§Û ÚÙØ¯Û٠خط â کد را درÙ٠تگ<pre>ÙØ±Ø§Ø± دÙÛØ¯Ø Ø¨Ø±Ø§Û Ø¨ÛØ´ از د٠خط کد â Ø§Ø² ÛÚ© جعبÙÙ Ø´ÙÛ Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯. (plnkrØ jsbinØ codepenâ¦)