ب٠خاطر Ø¯Ø§Ø´ØªÙ Ø¨Ø§Ø´ÛØ¯Ø Ø´ÛØ¡âÙØ§Û Ø¬Ø¯ÛØ¯ را Ù
ÛâØªÙØ§Ù با ÛÚ© تابع Ø³Ø§Ø²ÙØ¯Ù Ø§ÛØ¬Ø§Ø¯ Ú©Ø±Ø¯Ø Ù
ث٠new F().
اگر F.prototype ÛÚ© Ø´ÛØ¡ Ø¨Ø§Ø´Ø¯Ø Ø¹Ù
Ùگر new از Ø¢Ù Ø¨Ø±Ø§Û ØªÙØ¸ÛÙ
[[Prototype]] Ø¨Ø±Ø§Û Ø´ÛØ¡ Ø¬Ø¯ÛØ¯ Ø§Ø³ØªÙØ§Ø¯Ù Ù
ÛâÚ©ÙØ¯.
Ø¬Ø§ÙØ§âاسکرÛپت از ابتدا Ø¯Ø§Ø±Ø§Û ÙØ±Ø§Ø«Øª Ù¾Ø±ÙØªÙتاÛÙ¾ Ø¨ÙØ¯. اÛÙ ÛÚ©Û Ø§Ø² ÙÛÚÚ¯ÛâÙØ§Û اصÙÛ Ø²Ø¨Ø§Ù Ø¨ÙØ¯.
اÙ
ا در ÙØ¯ÛÙ
Ø Ø¯Ø³ØªØ±Ø³Û Ù
ستÙÛÙ
Ø¨Ù Ø¢Ù ÙØ¬Ùد ÙØ¯Ø§Ø´Øª. تÙÙØ§ ÚÛØ²Û Ú©Ù Ø¨Ù Ø·ÙØ± ÙØ§Ø¨Ù اعتÙ
اد کار Ù
Ûâکرد ÙÛÚÚ¯Û "prototype" تابع Ø³Ø§Ø²ÙØ¯Ù Ø¨ÙØ¯ ک٠در اÛÙ ÙØµÙ ØªÙØ¶ÛØ Ø¯Ø§Ø¯Ù Ø´Ø¯. Ø¨ÙØ§Ø¨Ø±Ø§Û٠اسکرÛپتâÙØ§Û Ø²ÛØ§Ø¯Û ÙØ¬Ùد Ø¯Ø§Ø±ÙØ¯ Ú©Ù ÙÙÙØ² از Ø¢Ù Ø§Ø³ØªÙØ§Ø¯Ù Ù
ÛâÚ©ÙÙØ¯.
ÙØ·ÙØ§Ù ØªÙØ¬Ù Ø¯Ø§Ø´ØªÙ Ø¨Ø§Ø´ÛØ¯ Ú©Ù F.prototype در اÛÙØ¬Ø§ ب٠Ù
Ø¹ÙØ§Û ÛÚ© ÙÛÚÚ¯Û Ù
عÙ
ÙÙÛ Ø¨Ù ÙØ§Ù
"prototype" در F است. ÚÛØ²Û شبÛÙ Ø¨Ù Ø§ØµØ·ÙØ§Ø âprototypeâ Ø¨Ù ÙØ¸Ø± Ù
ÛâØ±Ø³Ø¯Ø Ø§Ù
ا در اÛÙØ¬Ø§ ÙØ§Ùعا٠ب٠Ù
Ø¹ÙØ§Û ÛÚ© ÙÛÚÚ¯Û Ù
عÙ
ÙÙÛ Ø¨Ø§ اÛÙ ÙØ§Ù
است.
در اÛÙØ¬Ø§ ÛÚ© Ù Ø«Ø§Ù ÙØ¬Ùد دارد:
let animal = {
eats: true
};
function Rabbit(name) {
this.name = name;
}
Rabbit.prototype = animal;
let rabbit = new Rabbit("Ø®Ø±Ú¯ÙØ´ سÙÛØ¯"); // rabbit.__proto__ == animal
alert( rabbit.eats ); // true
ØªÙØ¸ÛÙ
Rabbit.prototype = animal ب٠Ù
Ø¹ÙØ§Û ÙØ§ÙØ¹Û Ú©ÙÙ
٠اÛÙ Ù
ÙØ§Ø±Ø¯ را Ø¨ÛØ§Ù Ù
ÛâÚ©ÙØ¯: «ÙÙØªÛ ÛÚ© new Rabbit Ø§ÛØ¬Ø§Ø¯ Ø´Ø¯Ø [[Prototype]] آ٠را ب٠animal اختصاص دÙÛØ¯Â«.
اÛ٠تصÙÛØ± ÙØªÛج٠است:
در تصÙÛØ±Ø "prototype" ÛÚ© ÙÙØ´ اÙÙÛ Ø§Ø³ØªØ Ø¨Ù Ù
Ø¹ÙØ§Û ÛÚ© ÙÛÚÚ¯Û Ù
عÙ
ÙÙÛØ Ù [[Prototype]] عÙ
ÙØ¯Û Ø§Ø³ØªØ Ø¨Ù Ù
Ø¹ÙØ§Û ارث برد٠rabbit از animal.
F.prototype ÙÙØ· در زÙ
ا٠new F Ø§Ø³ØªÙØ§Ø¯Ù Ù
ÛâØ´ÙØ¯ÙÛÚÚ¯Û F.prototype تÙÙØ§ زÙ
اÙÛ Ø§Ø³ØªÙØ§Ø¯Ù Ù
ÛâØ´ÙØ¯ Ú©Ù new F ÙØ±Ø§Ø®ÙاÙÛ Ø´ÙØ¯Ø [[Prototype]] را Ø¨Ù Ø´ÛØ¡ Ø¬Ø¯ÛØ¯ اختصاص Ù
ÛâØ¯ÙØ¯.
اگر پس از Ø§ÛØ¬Ø§Ø¯Ø ÙÛÚÚ¯Û F.prototype تغÛÛØ± Ú©ÙØ¯ (F.prototype = <ÛÚ© Ø´ÛØ¡ دÛگر>)Ø Ø¢ÙÚ¯Ø§Ù Ø§Ø´ÛØ§Ø¡ Ø¬Ø¯ÛØ¯ Ø§ÛØ¬Ø§Ø¯ Ø´Ø¯Ù ØªÙØ³Ø· new F Ø´ÛØ¡ دÛÚ¯Ø±Û Ø¨Ù Ø¹ÙÙØ§Ù [[Prototype]] Ø®ÙØ§ÙÙØ¯ Ø¯Ø§Ø´ØªØ Ø§Ù
ا Ø§Ø´ÛØ§Ø¡ Ù
ÙØ¬ÙØ¯Ø Ø´ÛØ¡ ÙØ¯ÛÙ
Û Ø±Ø§ ØÙظ Ù
ÛâÚ©ÙÙØ¯.
F.prototype Ù¾ÛØ´âÙØ±Ø¶Ø ÙÛÚÚ¯Û Ø³Ø§Ø²ÙØ¯Ù
ÙØ± تابع Ø¯Ø§Ø±Ø§Û ÙÛÚÚ¯Û "prototype" Ø§Ø³ØªØ ØØªÛ اگر آ٠را ØªÙØ¸ÛÙ
ÙÚ©ÙÛÙ
.
"prototype" Ù¾ÛØ´âÙØ±Ø¶ ÛÚ© Ø´ÛØ¡ با تÙÙØ§ ÙÛÚÚ¯Û constructor است Ú©Ù Ø¨Ù Ø®ÙØ¯ تابع اشار٠Ù
ÛâÚ©ÙØ¯.
٠ث٠اÛÙ:
function Rabbit() {}
/* Ù¾ÛØ´âÙØ±Ø¶ prototype
Rabbit.prototype = { constructor: Rabbit };
*/
٠ا Ù ÛâØªÙØ§ÙÛ٠آ٠را Ø¨Ø±Ø±Ø³Û Ú©ÙÛÙ :
function Rabbit() {}
// Ø¨Ù ØµÙØ±Øª Ù¾ÛØ´âÙØ±Ø¶:
// Rabbit.prototype = { constructor: Rabbit }
alert( Rabbit.prototype.constructor == Rabbit ); // true
Ø·Ø¨ÛØ¹ØªØ§ÙØ Ø§Ú¯Ø± Ú©Ø§Ø±Û Ø§ÙØ¬Ø§Ù
ÙØ¯ÙÛÙ
Ø ÙÛÚÚ¯Û constructor از طرÛÙ [[Prototype]] Ø¨Ø±Ø§Û ÙÙ
Ù Ø®Ø±Ú¯ÙØ´âÙØ§ در دسترس است:
function Rabbit() {}
// Ø¨Ù ØµÙØ±Øª Ù¾ÛØ´âÙØ±Ø¶:
// Rabbit.prototype = { constructor: Rabbit }
let rabbit = new Rabbit(); // {constructor: Rabbit} ارث Ù
ÛâØ¨Ø±Ø¯ از
alert(rabbit.constructor == Rabbit); // true (از Ù¾Ø±ÙØªÙتاÛÙ¾)
Ù
ÛâØªÙØ§ÙÛÙ
از ÙÛÚÚ¯Û constructor Ø¨Ø±Ø§Û Ø§ÛØ¬Ø§Ø¯ ÛÚ© Ø´ÛØ¡ Ø¬Ø¯ÛØ¯ با Ø§Ø³ØªÙØ§Ø¯Ù از Ø³Ø§Ø²ÙØ¯Ù Ù
شاب٠Ù
ÙØ¬Ùد Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ
.
٠ث٠اÛÙ ÙÙ ÙÙÙ:
function Rabbit(name) {
this.name = name;
alert(name);
}
let rabbit = new Rabbit("Ø®Ø±Ú¯ÙØ´ سÙÛØ¯");
let rabbit2 = new rabbit.constructor("Ø®Ø±Ú¯ÙØ´ Ø³ÛØ§Ù");
اÛÙ Ù ÙÛØ¯ است ز٠اÙÛ Ú©Ù Ù Ø§ ÛÚ© Ø´Û Ø¯Ø§Ø±ÛÙ Ø ÙÙ ÛâØ¯Ø§ÙÛ٠از Ú©Ø¯Ø§Ù Ø³Ø§Ø²ÙØ¯Ù Ø¨Ø±Ø§Û Ø¢Ù Ø§Ø³ØªÙØ§Ø¯Ù شد٠است (Ù Ø«ÙØ§Ù از ÛÚ© کتابخاÙ٠شخص Ø«Ø§ÙØ« Ù ÛâØ¢ÛØ¯)Ø Ù Ø¨Ø§ÛØ¯ ÛÚ©Û Ø¯Ûگر از Ù٠ا٠ÙÙØ¹ Ø§ÛØ¬Ø§Ø¯ Ú©ÙÛÙ .
اÙ
ا Ø§ØØªÙ
Ø§ÙØ§Ù Ù
ÙÙ
ترÛÙ ÚÛØ² در Ù
ÙØ±Ø¯ "constructor" اÛ٠است Ú©Ù â¦
*** â¦Ø®Ùد Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±Ûپت از Ù
ÙØ¯Ø§Ø± درست "constructor" اطÙ
ÛÙØ§Ù ÙÙ
ÛâØ¯ÙØ¯.**
بÙÙØ در "prototype" Ù¾ÛØ´âÙØ±Ø¶ Ø¨Ø±Ø§Û ØªÙØ§Ø¨Ø¹ ÙØ¬Ùد Ø¯Ø§Ø±Ø¯Ø Ø§Ù
ا ÙÙ
ÛÙ. Ø¢ÙÚ٠بعدا٠با Ø¢Ù Ø§ØªÙØ§Ù Ù
Û Ø§ÙØªØ¯ â کاÙ
ÙØ§Ù ب٠Ù
ا Ø¨Ø³ØªÚ¯Û Ø¯Ø§Ø±Ø¯.
ب٠ÙÛÚÙØ اگر Ù¾Ø±ÙØªÙتاÛÙ¾ Ù¾ÛØ´âÙØ±Ø¶ را بÙâØ·ÙØ± Ú©ÙÛ Ø¬Ø§ÛگزÛÙ Ú©ÙÛÙ
Ø "constructor" در Ø¢Ù ÙØ¬Ùد ÙØ®ÙØ§ÙØ¯ داشت.
Ø¨Ø±Ø§Û Ù Ø«Ø§Ù:
function Rabbit() {}
Rabbit.prototype = {
jumps: true
};
let rabbit = new Rabbit();
alert(rabbit.constructor === Rabbit); // false
Ø¨ÙØ§Ø¨Ø±Ø§ÛÙØ Ø¨Ø±Ø§Û ØÙظ "constructor" Ø¯Ø±Ø³ØªØ Ù
ÛâØªÙØ§ÙÛÙ
Ø¨Ù Ø¬Ø§Û Ø¨Ø§Ø²ÙÙÛØ³Û بÙâØ¹ÙÙØ§Ù ÛÚ© Ú©ÙØ ÙÛÚÚ¯ÛâÙØ§ را ب٠"prototype" Ù¾ÛØ´âÙØ±Ø¶ اضاÙÙ ÛØ§ از Ø¢Ù ØØ°Ù Ú©ÙÛÙ
:
function Rabbit() {}
// را Ø¨Ù Ø·ÙØ± کاÙ
٠بازÙÙÛØ³Û ÙÚ©ÙÛØ¯ Rabbit.prototype
// ÙÙØ· ب٠آ٠اضاÙÙ Ú©ÙÛØ¯
Rabbit.prototype.jumps = true
// ØÙظ Ù
ÛâØ´ÙØ¯ Rabbit.prototype.constructor ØØ§Ùت Ù¾ÛØ´âÙØ±Ø¶
ÛØ§Ø Ø¨Ù Ø·ÙØ± Ù
ØªÙØ§ÙØ¨Ø ÙÛÚÚ¯Û constructor را Ø¨Ù ØµÙØ±Øª Ø¯Ø³ØªÛ Ø¯ÙØ¨Ø§Ø±Ù Ø§ÛØ¬Ø§Ø¯ Ú©ÙÛØ¯:
Rabbit.prototype = {
jumps: true,
constructor: Rabbit
};
// ØØ§Ùا Ø³Ø§Ø²ÙØ¯Ù ÙÛØ² درست Ø§Ø³ØªØ Ø²ÛØ±Ø§ Ù
ا Ø¯ÙØ¨Ø§Ø±Ù آ٠را اضاÙ٠کردÛÙ
Ø®ÙØ§ØµÙ
در اÛÙ ÙØµÙ Ø¨Ù Ø·ÙØ± Ø®ÙØ§ØµÙ ÙØÙÙ ØªÙØ¸ÛÙ
[[Prototype]] Ø¨Ø±Ø§Û Ø§Ø´ÛØ§Ø¡ Ø§ÛØ¬Ø§Ø¯ شد٠از طرÛÙ ÛÚ© تابع Ø³Ø§Ø²ÙØ¯Ù را ØªÙØ¶ÛØ Ø¯Ø§Ø¯ÛÙ
. در Ø¢ÛÙØ¯Ù Ø´Ø§ÙØ¯ اÙÚ¯ÙÙØ§Û Ø¨Ø±ÙØ§Ù
ÙâÙÙÛØ³Û Ù¾ÛØ´Ø±ÙتÙâØªØ±Û Ø®ÙØ§ÙÛÙ
Ø¨ÙØ¯ ک٠بر آ٠تکÛÙ Ø¯Ø§Ø±ÙØ¯.
ÙÙ Ù ÚÛØ² Ø¨Ø³ÛØ§Ø± Ø³Ø§Ø¯Ù Ø§Ø³ØªØ ÙÙØ· ÚÙØ¯ ÙÚ©ØªÙ Ø¨Ø±Ø§Û Ø±ÙØ´Ù شد٠ÙÙ Ù ÚÛØ²âÙØ§:
- ÙÛÚÚ¯Û
F.prototype(آ٠را با[[Prototype]]اشتبا٠ÙÚ¯ÛØ±Ûد)Ø[[Prototype]]را Ø¨Ø±Ø§Û Ø§Ø´ÛØ§Ø¡ Ø¬Ø¯ÛØ¯Ø ÙÙÚ¯Ø§Ù ÙØ±Ø§Ø®ÙاÙÛnew F()ØªÙØ¸ÛÙ Ù ÛâÚ©ÙØ¯. - Ù
ÙØ¯Ø§Ø±
F.prototypeØ¨Ø§ÛØ¯ ÛÚ© Ø´ÛØ¡ ÛØ§nullباشد: Ù ÙØ§Ø¯Ûر دÛگر کار ÙÙ ÛâÚ©ÙÙØ¯. - ÙÛÚÚ¯Û
"prototype"تÙÙØ§ ز٠اÙÛ ÚÙÛ٠جÙÙÙ Ø®Ø§ØµÛ Ø¯Ø§Ø±Ø¯ ک٠رÙÛ ÛÚ© تابع Ø³Ø§Ø²ÙØ¯Ù ØªÙØ¸ÛÙ Ø´ÙØ¯ ٠باnewÙØ±Ø§Ø®ÙاÙÛ Ø´ÙØ¯.
در Ø§Ø´ÛØ§Ø¡ Ù
عÙ
ÙÙÛ prototype ÚÛØ² Ø®Ø§ØµÛ ÙÛØ³Øª:
let user = {
name: "John",
prototype: "Bla-bla" // ب٠ÙÛÚ ØµÙØ±Øª جادÙÛÛ ÙÛØ³Øª
};
بÙâØ·ÙØ± Ù¾ÛØ´âÙØ±Ø¶ ÙÙ
Ù ØªÙØ§Ø¨Ø¹ Ø¯Ø§Ø±Ø§Û F.prototype = { constructor: F } ÙØ³ØªÙØ¯Ø Ø¨ÙØ§Ø¨Ø±Ø§ÛÙ Ù
ÛâØªÙØ§ÙÛÙ
Ø³Ø§Ø²ÙØ¯Ù ÛÚ© Ø´ÛØ¡ را با Ø¯Ø³ØªØ±Ø³Û Ø¨Ù ÙÛÚÚ¯Û "constructor" Ø¢Ù Ø¯Ø±ÛØ§Ùت Ú©ÙÛÙ
.
ÙØ¸Ø±Ø§Øª
<code>Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯Ø Ø¨Ø±Ø§Û ÚÙØ¯Û٠خط â کد را درÙ٠تگ<pre>ÙØ±Ø§Ø± دÙÛØ¯Ø Ø¨Ø±Ø§Û Ø¨ÛØ´ از د٠خط کد â Ø§Ø² ÛÚ© جعبÙÙ Ø´ÙÛ Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯. (plnkrØ jsbinØ codepenâ¦)