ÙØ§ ØªÙØ³Ù بأÙÙÙ ÙÙ
ÙÙÙ Ø¥ÙØ´Ø§Ø¡ ÙØ§Ø¦Ùات Ø¬Ø¯ÙØ¯Ø© Ù
Ù Ø®ÙØ§Ù داÙÙØ© Ø§ÙØ¨Ø§ÙÙ (Ù
ث٠new F()â â«).
ÙÙ ÙØ§Ù F.prototype ÙØ§Ø¦Ù Ø¬Ø§ÙØ§ Ø³ÙØ±ÙØ¨ØªØ ÙØ¥Ù اÙÙ
عاÙ
ÙÙ new Ø³ÙØ¶Ø¨Ø· Ø§ÙØ®Ø§ØµÙØ© [[Prototype]] ÙÙØ°Ø§ اÙÙØ§Ø¦Ù Ø§ÙØ¬Ø¯Ùد.
Ù
Ù Ø¨Ø¯Ø§ÙØ© تضÙ
ÙÙ ÙØºØ© Ø¬Ø§ÙØ§ Ø³ÙØ±Ùبت ÙÙÙØ±Ø§Ø«Ø© اÙÙÙ
ÙØ°Ø¬ÙØ© Ø¬Ø¹ÙØªÙا Ù
٠اÙÙ
Ù
ÙØ²Ø§Øª Ø§ÙØ£Ø³Ø§Ø³ÙØ© Ù٠اÙÙØºØ©.
ÙÙÙÙ Ù٠اÙÙ
اض٠ÙÙ
ÙÙÙ ÙÙØ§Ù٠اÙÙØ¯Ø±Ø© ÙÙÙØµÙ٠اÙÙ
باشر ÙÙÙØ±Ø§Ø«Ø© اÙÙÙ
ÙØ°Ø¬ÙØ© ÙØ§ÙطرÙÙØ© اÙÙØÙØ¯Ø© اÙÙØªÙ ØÙÙØª Ù
ØÙÙØ§ ÙÙ Ø®Ø§ØµÙØ© "prototype" Ù٠داÙÙØ© Ø§ÙØ¨Ø§ÙÙ. Ø³ÙØ´Ø±Ø ÙÙ ÙØ°Ø§ Ø§ÙØ¯Ø±Ø³ ÙÙÙÙØ© استخداÙ
ÙØ§ ÙØ£ÙÙ Ù
Ø§Ø²Ø§Ù Ø§ÙØ¹Ø¯Ùد Ù
Ù Ø§ÙØ´ÙÙØ±Ø§Øª Ø§ÙØ¨Ø±Ù
Ø¬ÙØ© اÙÙØ¯ÙÙ
Ø© تستخدÙ
ÙØ§.
ÙØ§ØØ¸ بأÙÙ F.prototype ÙÙØ§ تعÙÙ ÙØ¬Ùد Ø®Ø§ØµÙØ© Ø¹Ø§Ø¯ÙØ© باسÙ
"prototype" ÙÙÙØ§Ø¦Ù F. ربÙ
ا تÙÙÙØ± ÙÙØ£ÙÙØ§ اÙÙÙ
ÙØ°Ø¬ Ø§ÙØ£ÙÙÙ ÙÙØ°Ø§ اÙÙØ§Ø¦ÙØ ÙÙÙÙ ÙØ§â¦ ÙÙÙØ§ ÙØ¹ÙÙ ØØ±ÙÙÙØ§ Ø£ÙÙØ§ Ø®Ø§ØµÙØ© Ø¹Ø§Ø¯ÙØ© ÙÙØ§ ÙØ°Ø§ Ø§ÙØ§Ø³Ù
.
Ø¥ÙÙ٠٠ثاÙÙØ§:
let animal = {
eats: true
};
function Rabbit(name) {
this.name = name;
}
Rabbit.prototype = animal; // ÙÙØ§
let rabbit = new Rabbit("White Rabbit"); // rabbit.__proto__ == animal
alert( rabbit.eats ); // true
تعÙÙ Ø§ÙØªØ¹ÙÙÙ
Ø© Rabbit.prototype = animal ØØ±ÙÙÙØ§ Ø§ÙØ¢ØªÙ: âÙ
ا Ø¥Ù ÙÙÙØ´Ø£ ÙØ§Ø¦Ù new RabbitØ Ø£Ø³ÙÙØ¯ Ø®Ø§ØµÙØ© [[Prototype]] ÙÙ ÙØªÙÙÙ ÙÙÙØ§Ø¦Ù animalâ.
Ø¥ÙÙÙ Ø§ÙØµÙرة اÙÙØ§ØªØ¬Ø©:
[proto-constructor-animal-rabbit.png]
ÙÙ Ø§ÙØµÙرة ÙØ±Ù "prototype" Ù٠سÙÙ
Ø£ÙÙÙ (أ٠أÙÙÙØ§ Ø®Ø§ØµÙØ© Ø¹Ø§Ø¯ÙØ©) بÙÙÙ
ا [[Prototype]] Ù٠سÙÙ
رأس٠(أ٠أÙÙÙØ§ ØªÙØ¶ÙØ ÙØ±Ø§Ø«Ø© ÙØ§Ø¦Ù rabbit ÙÙÙØ§Ø¦Ù animal).
Ø¥Ù Ø§ÙØ®Ø§ØµÙØ© F.prototype تستخدÙ
Ø¹ÙØ¯ Ø§ÙØ¥Ùشاء ÙÙØ· Ø£Ù Ø¹ÙØ¯Ù
ا تستدع٠تعÙÙÙ
Ø© new F ÙØªÙØ³ÙØ¯ ÙÙÙØ§Ø¦Ù اÙÙÙÙ
Ø© اÙÙ
ÙØ§Ø³Ø¨Ø© ÙÙØ®Ø§ØµÙØ© [[Prototype]].
ÙÙ ØØ§Ù ØªØºÙØ±Øª Ø§ÙØ®Ø§ØµÙØ© F.prototype Ù
Ø«ÙÙØ§ (F.prototype = <another object>â)Ø Ø¹ÙØ¯Ùا Ø³ØªØØµÙ اÙÙØ§Ø¦Ùات اÙÙ
ÙØ´Ø£Ø© بعد ÙØ°Ø§ Ø§ÙØªØºÙÙØ± عÙ٠اÙÙÙÙ
Ø© Ø§ÙØ¬Ø¯Ùدة ÙÙØ®Ø§ØµÙØ© [[Prototype]] (أ٠اÙÙØ§Ø¦Ù Ø§ÙØ¬Ø¯Ùد)Ø
ÙÙÙ٠اÙÙØ§Ø¦Ùات اÙÙØ¯ÙÙ
Ø© Ù
Ø§Ø²Ø§ÙØª ØªØØªÙظ باÙÙÙÙ
Ø© اÙÙØ¯ÙÙ
Ø©.
اÙÙÙÙ Ø© Ø§ÙØ¥ÙØªØ±Ø§Ø¶ÙØ© ÙÙØ®Ø§ØµÙØ© prototype ÙÙ Ø§ÙØ¨Ø§ÙÙ
ÙÙÙÙ Ø¯Ø§ÙØ© Ø®Ø§ØµÙØ© "prototype" ØØªÙÙ ÙÙ ÙÙ
ÙÙØ¯ÙÙ
ÙØ§ ÙØÙ.
إ٠اÙÙÙÙ
Ø© Ø§ÙØ¥ÙØªØ±Ø§Ø¶ÙØ© ÙÙØ®Ø§ØµÙØ© "prototype" ØªÙØ´Ùر Ø¥ÙÙ ÙÙØ³ Ø§ÙØ¯Ø§ÙÙØ©.
ÙÙØ°Ø§ ØªÙ Ø§Ù ÙØ§:
function Rabbit() {}
/* ÙØ§Ø¦Ùâ« prototype
Rabbit.prototype = { constructor: Rabbit };
*/
[function-prototype-constructor.png]
ÙÙ ÙÙÙØ§ ÙØØµ ذÙÙ Ø£ÙØ¶Ùا:
function Rabbit() {}
// Ù
بدئÙÙØ§:
// Rabbit.prototype = { constructor: Rabbit }
alert( Rabbit.prototype.constructor == Rabbit ); // true
Ø·Ø¨ÙØ¹ÙÙØ§Ø Ø¥Ù ÙÙ
ÙØ¹Ø¯Ù Ø£Ù Ø´ÙØ¡Ø ستÙÙÙ Ø®Ø§ØµÙØ© constructor Ù
ÙØªØ§ØØ© ÙÙÙÙ ÙØ§Ø¦Ùات rabbit Ù
Ù Ø®ÙØ§Ù ÙØ§Ø¦Ù [[Prototype]]:
function Rabbit() {}
// Ù
بدئÙÙØ§:
// Rabbit.prototype = { constructor: Rabbit }
let rabbit = new Rabbit(); // ترث Ù
Ùâ« {constructor: Rabbit}
alert(rabbit.constructor == Rabbit); // â« true Ù
Ù prototypeâ
[rabbit-prototype-constructor.png]
ÙÙ
ÙÙÙØ§ استعÙ
Ø§Ù Ø§ÙØ®Ø§ØµÙØ© constructor ÙØ¥Ùشاء ÙØ§Ø¦Ù Ø¬Ø¯ÙØ¯ باستعÙ
ا٠ÙÙØ³ Ø§ÙØ¨Ø§Ù٠اÙÙØ°Ù Ø£ÙØ´Ø£ اÙÙØ§Ø¦Ù اÙÙ
ÙØ¬Ùد ØØ§ÙÙÙØ§.
ÙÙØ°Ø§:
function Rabbit(name) {
this.name = name;
alert(name);
}
let rabbit = new Rabbit("White Rabbit");
// Ø§ÙØ¸Ø±
let rabbit2 = new rabbit.constructor("Black Rabbit");
ÙÙÙÙØ¯Ùا ÙØ°Ø§ ØÙÙ ÙÙÙÙ Ø£Ù Ø§Ù ÙØ§Ø¦Ù ÙÙÙÙ ÙØ§ ÙØ¹Ø±Ù Ø§ÙØ¨Ø§ÙÙ Ø§ÙØÙÙÙ٠اÙÙØ°Ù Ø¨ÙØ§Ù (رب٠ا Ø£ØªÙ Ù Ù Ù ÙØªØ¨Ø© Ø®Ø§Ø±Ø¬ÙØ©)Ø ÙØ£Ø±Ø¯Ùا Ø¥ÙØ´Ø§Ø¡ ÙØ§Ø¦Ù آخر Ù Ø«ÙÙ.
ÙÙÙÙ Ø§ÙØ£Ù
ر Ø§ÙØ£ÙÙ
اÙÙØ°Ù ÙØªØ¹ÙÙ٠بÙÙ "constructor" Ù٠أÙÙ ÙØºØ© Ø¬Ø§ÙØ§ Ø³ÙØ±Ùبت ÙÙØ³Ùا ÙØ§ تتأÙÙØ¯ Ù
٠صØÙØ© ÙÙÙ
Ø© Ø®Ø§ØµÙØ© "constructor".
ÙØ¹Ù
ÙÙ
ا ÙØ±Ø£ØªØ Ø§ÙØ®Ø§ØµÙØ© Ù
ÙØ¬Ùدة ÙÙ "prototype" ÙÙØ¯ÙاÙÙØ ÙÙØ°Ø§ ÙÙÙ Ù
ا ÙÙ Ø§ÙØ£Ù
ر. إذ ستعتÙ
د ÙØºØ© Ø¬Ø§ÙØ§ Ø³ÙØ±Ùبت عÙÙÙØ§ ÙÙÙ
ا Ø³ÙØØ¯Ø« ÙØ§ØÙÙØ§.
ÙÙ
Ø«ÙÙØ§ ÙÙ Ø£Ø±Ø¯ÙØ§ استبدا٠اÙÙÙÙ
Ø© Ø§ÙØ¥ÙØªØ±Ø§Ø¶ÙØ© ÙÙØ®Ø§ØµÙØ© 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.
Ù٠اÙÙØ§Ø¦Ùات Ø§ÙØ¹Ø§Ø¯ÙØ© ÙÙØ³Øª Ø¨Ø®Ø§ØµÙØ© خاصة Ø¬Ø¯ÙØ§:
let user = {
name: "John",
prototype: "Bla-bla" // ÙØ²Ø¹Ùا Ø§ÙØ³ØØ±
};
ÙÙÙÙ Ø§ÙØ¯ÙاÙÙ Ù
بدئÙÙØ§ F.prototype = { constructor: F }âØ ÙÙÙ
ÙÙÙØ§ Ø£Ù ÙØ£Ø®Ø° باÙÙ Ù
عÙÙ Ù
Ù ÙØ§Ø¦Ù Ù
ا Ø¨Ø§ÙØ¯Ø®Ù٠إÙÙ Ø§ÙØ®Ø§ØµÙØ© "constructor" Ø§ÙØ®Ø§ØµØ© بÙ.
ت٠ارÙÙ
تغÙÙØ± Ø§ÙØ®Ø§ØµÙØ© âprototypeâ
Ø§ÙØ£ÙÙ ÙØ©: 5
Ø£ÙØ´Ø£Ùا ÙÙ Ø§ÙØ´ÙÙØ±Ø© Ø£Ø¯ÙØ§Ù ÙØ§Ø¦ÙÙØ§ Ø¬Ø¯ÙØ¯Ùا new Rabbit ÙØØ§ÙÙÙØ§ Ø¨Ø¹Ø¯ÙØ§ تعدÙÙ Ø§ÙØ®Ø§ØµÙØ© prototype ÙÙØ°Ø§ اÙÙØ§Ø¦Ù.
بادئ Ø°Ù Ø¨Ø¯Ø¡Ø ÙØ§Ùت Ø§ÙØ´ÙÙØ±Ø©:
function Rabbit() {}
Rabbit.prototype = {
eats: true
};
let rabbit = new Rabbit();
alert( rabbit.eats ); // true
-
ÙØ£Ø¶ÙÙØ§ Ø³ÙØ³ÙØ© ÙØµÙØ© أخر٠(عÙÙÙØ§ Ø¹ÙØ§Ù Ø©). ٠اذا Ø³ÙØ¹Ø±Ø¶ Ø§ÙØªØ§Ø¨Ùع
alertØfunction Rabbit() {} Rabbit.prototype = { eats: true }; let rabbit = new Rabbit(); Rabbit.prototype = {}; // (*) alert( rabbit.eats ); // ? -
Ù٠اذا ÙÙâ¦ ÙØ§Ùت Ø§ÙØ´ÙÙØ±Ø© ÙÙØ°Ù (استبدÙÙØ§ Ø³Ø·Ø±ÙØ§ ÙÙÙØ§)Ø
function Rabbit() {} Rabbit.prototype = { eats: true }; let rabbit = new Rabbit(); Rabbit.prototype.eats = false; // (*) alert( rabbit.eats ); // ? -
Ù٠اذا Ø¹Ù ÙØ°Ù (استبدÙÙØ§ Ø³Ø·Ø±ÙØ§ Ø£ÙØ¶Ùا)Ø
function Rabbit() {} Rabbit.prototype = { eats: true }; let rabbit = new Rabbit(); delete rabbit.eats; // (*) alert( rabbit.eats ); // ? -
ÙÙØ°Ùâ¦ Ø£ÙØ¶Ùا:
function Rabbit() {} Rabbit.prototype = { eats: true }; let rabbit = new Rabbit(); delete Rabbit.prototype.eats; // (*) alert( rabbit.eats ); // ?
Ø§ÙØÙ
Ø§ÙØ¥Ø¬Ø§Ø¨Ø§Øª:
-
true.ع٠ÙÙØ© Ø§ÙØ¥Ø³Ùاد عÙÙ
Rabbit.prototypeتضع Ø§ÙØ®Ø§ØµÙØ©[[Prototype]]ÙÙÙØ§Ø¦Ùات Ø§ÙØ¬Ø¯ÙØ¯Ø©Ø ÙÙÙÙÙÙØ§ ÙØ§ تعدÙ٠عÙ٠اÙÙØ§Ø¦Ùات اÙÙ ÙØ¬Ùدة ٠سبÙÙØ§. -
false. ع٠ÙÙØ© Ø§ÙØ¥Ø³Ùاد تÙÙÙ Ù Ù Ø®ÙØ§Ù Ø§ÙØ®Ø§ØµÙØ©Rabbit.prototypeØ Ø¥Ù Ø§ÙØ®Ø§ØµÙØ© اÙ٠شار Ø¥ÙÙÙØ§ ÙÙØ§Rabbit.prototypeÙÙØ³Øª Ù ÙØ±Ø±ÙØ§Ø ÙØ¥Ù٠ا بÙÙØª ÙÙØ´Ø§Ø± Ø¥ÙÙÙØ§ Ù Ù Ø®ÙØ§ÙRabbit.prototypeÙ Ø§ÙØ®Ø§ØµÙØ©[[Prototype]]ÙÙÙØ§Ø¦Ùrabbit.ÙØ°Ø§ ØÙÙ ÙØºÙÙØ± اÙÙ ØØªÙÙ ÙÙ Ø§ÙØ·Ø±ÙÙØ© Ø§ÙØ£ÙÙÙ Ø³ÙØ±Ù اÙÙØªØ§Ø¦Ø¬ ÙÙ Ø§ÙØ·Ø±ÙÙØ© Ø§ÙØ«Ø§ÙÙØ©.
-
true. ÙÙ٠ع٠ÙÙØ§Øª Ø§ÙØØ°Ù ØªØ·Ø¨Ù Ù Ø¨Ø§Ø´Ø±Ø© عÙ٠اÙÙØ§Ø¦Ù. ØªØØ§ÙÙ ÙØ°Ù Ø§ÙØªØ¹ÙÙÙ Ø©delete rabbit.eatsØØ°Ù Ø§ÙØ®Ø§ØµÙØ© اÙ٠خصصة ÙÙÙØ§Ø¦ÙrabbitÙÙÙÙÙØ§ ÙÙØ³Øª ÙÙØ§. ÙØ°Ø§ Ø§ÙØ¹Ù ÙÙØ© ÙÙ ÙÙÙÙ ÙÙØ§ Ø£Ù ØªØ£Ø«ÙØ±. -
undefined.ØÙØ°ÙØª Ø§ÙØ®Ø§ØµÙØ©
eatsÙ Ù ÙØ§Ø¦Ù prototype Ù٠ا عادت Ù ÙØ¬Ùدة بعد Ø§ÙØ¢Ù.
Ø¥ÙØ´Ø§Ø¡ ÙØ§Ø¦Ù Ø¬Ø¯ÙØ¯ Ù Ù Ø®ÙØ§Ù ÙÙØ³ باÙÙ ÙÙØ§Ø¦Ù٠آخر
Ø§ÙØ£ÙÙ ÙØ©: 5
تخÙÙ٠بأÙÙ ÙØ¯ÙÙØ§ اÙÙØ§Ø¦Ù اÙÙØ±Ùد obj ÙØ£ÙØ´Ø£ØªÙ Ø¨Ø¯Ø§ÙØ© Ø§ÙØ¨Ø§ÙÙØ ÙÙÙÙÙØ§â¦ ÙØ§ ÙØ¹Ø±Ù Ø£ÙÙ Ø¯Ø§ÙØ© ÙØ°ÙØ ÙÙÙÙ Ù
ع ذÙÙ ÙØ±Ùد استعÙ
ا٠ÙÙØ³ Ø§ÙØ¨Ø§ÙÙ ÙØ¥Ùشاء ÙØ§Ø¦Ù Ø¬Ø¯ÙØ¯ آخر.
Ø£ÙÙ ÙÙ ÙÙØ°Ù Ø§ÙØ´ÙÙØ±Ø© Ø¥ÙØ¬Ø§Ø² اÙÙ ÙÙ Ø©Ø
let obj2 = new obj.constructor();
Ø§ÙØªØ¨ Ù
ثاÙÙ٠باستخداÙ
باÙÙÙÙ ÙÙÙØ§Ø¦Ù objØ ÙØ§ØØ¯Ùا ÙØ¹Ù
Ù Ù
ع Ø§ÙØ´ÙÙØ±Ø© Ø£Ø¹ÙØ§ÙØ ÙÙØ§ØØ¯Ùا ÙØ§ ÙØ¹Ù
Ù ÙÙ.
Ø§ÙØÙ
ÙÙ
ÙÙ Ø£Ù ÙØ³ØªØ¹Ù
Ù ÙØ°Ù Ø§ÙØ·Ø±ÙÙØ© ÙÙ ÙÙÙØ§ Ù
ØªØ£ÙØ¯ÙÙ Ù
ئة باÙÙ
ئة بأÙÙ Ø®Ø§ØµÙØ© "constructor" تØÙ
٠اÙÙÙÙ
Ø© Ø§ÙØµØÙØØ©.
ÙÙ
Ø«ÙÙØ§ ÙÙ ÙÙ
ÙØ¹Ø¯Ù٠عÙÙ "prototype" اÙÙ
Ø¨Ø¯Ø¦ÙØ© ÙØ³ØªØ¹Ù
Ù ÙØ°Ù Ø§ÙØ´ÙÙØ±Ø© Ø¨ÙØ§ Ø±ÙØ¨:
function User(name) {
this.name = name;
}
let user = new User('John');
let user2 = new user.constructor('Pete');
alert( user2.name ); // Pete (عÙ
ÙØª!)
ÙÙØ°Øª Ø§ÙØ´ÙÙØ±Ø© تÙÙÙØ°Ùا صØÙØÙا إذ Ø£ÙÙ User.prototype.constructor == User.
ÙÙÙÙ⦠ÙÙ Ø£ØªÙ Ø£ØØ¯ÙÙ
Ù
Ø«ÙÙØ§ ÙÙØªØ¨ عÙÙ User.prototype ÙÙØ³Ù إعادة Ø¥ÙØ´Ø§Ø¡ constructor ÙØªÙØ´ÙØ± Ø¥ÙÙ ÙØ§Ø¦Ù اÙÙ
ستخدÙ
UserØ ÙÙ٠تعÙ
Ù Ø§ÙØ´ÙÙØ±Ø©.
٠ثاÙ:
function User(name) {
this.name = name;
}
User.prototype = {}; // (*)
let user = new User('John');
let user2 = new user.constructor('Pete');
alert( user2.name ); // undefined
ÙÙ
Ù ÙÙÙ
Ø© user2.name ÙÙ undefinedØ
Ø¥ÙÙ٠طرÙÙØ© عÙ
٠تعÙÙÙ
Ø© new user.constructor('Pete')â:
- Ø£ÙÙÙØ§Ø ØªØ¨ØØ« ع٠اÙÙ
ÙÙØ´Ùئ
constructorداخÙuserØ ÙÙØ§ تجدÙ. - Ø«Ù
٠تتبع Ø³ÙØ³ÙØ© prototype ÙØªØ¬Ø¯ prototype اÙÙØ§Ø¦Ù
userÙÙUser.prototypeØ ÙØ£ÙØ¶ÙØ§ ÙØ§ تجدÙ. - ÙÙÙ
Ø©
User.prototype٠ا Ù٠إÙÙØ§ ÙØ§Ø¦ÙÙØ§ ÙØ§Ø±ØºÙا{}Ø Ù ÙÙÙ Ø© Ø§ÙØ®Ø§ØµÙØ© prototype ÙÙØ°Ø§ اÙÙØ§Ø¦Ù ÙÙObject.prototypeØ ÙÙÙØ§ ÙØ¬Ø¯ÙاObject.prototype.constructor == ObjectبذÙ٠استع٠ÙÙØ§Ù.
ÙÙÙ ÙÙØ§ÙØ© Ø§ÙØ£Ù
Ø±Ø ÙØ¯ÙÙØ§ Ø§ÙØªØ¹ÙÙÙ
Ø© let user2 = new Object('Pete')â Ø¥Ø° Ø£ÙÙ Ø§ÙØ¨Ø§ÙÙ Ø§ÙØ®Ø§Øµ باÙÙØ§Ø¦Ù Object ÙØªØ¬Ø§Ù٠اÙÙØ³Ø·Ø§Ø¡ ÙÙÙØ´ÙØ¡ دائÙ
ÙØ§ ÙØ§Ø¦ÙÙØ§ ÙØ§Ø±ØºÙا. بطرÙÙØ© Ù
Ø´Ø§Ø¨ÙØ© Ø¬Ø¯ÙØ§ ÙÙØªØ¹ÙÙÙ
Ø© let user2 = {}â ÙØ§ÙÙØªÙ Ø£ÙØ´Ø£Øª ÙÙØ§ اÙÙØ§Ø¦Ù user2 ÙÙ ÙÙØ§ÙØ© Ø§ÙØ£Ù
ر.
ترج٠ة -ÙØ¨ØªØµØ±Ù- ÙÙÙØµÙ F.prototype Ù Ù ÙØªØ§Ø¨ The JavaScript language
Ø§ÙØªØ¹ÙÙÙØ§Øª
<code>Ø ÙÙÙÙØ«Ùر Ù Ù Ø§ÙØ³Ø·Ùر استخدÙ<pre>Ø ÙÙØ£Ùثر Ù Ù 10 Ø³Ø·ÙØ± استخد٠(plnkr, JSBin, codepenâ¦)