ÙØ¦Ø© ت٠دد اÙÙØ§Ø¦ÙØ
ÙÙ
ا ÙØ¹ÙÙ
Ø Ø¹Ø§Ø¯Ø© Ù
ا ترث جÙ
ÙØ¹ اÙÙØ§Ø¦Ùات Ù
Ù Object.prototype ÙØªØØµÙ عÙ٠طر٠ÙÙÙØ§Ø¦Ùات" Ø§ÙØ¹Ø§Ù
Ø© "Ù
Ø«ÙhasOwnProperty ÙÙ
ا Ø¥Ù٠ذÙÙ.
عÙ٠سبÙ٠اÙ٠ثاÙ:
class Rabbit {
constructor(name) {
this.name = name;
}
}
let rabbit = new Rabbit("Rab");
// hasOwnProperty method is from Object.prototype
alert( rabbit.hasOwnProperty('name') ); // true
ÙÙÙ٠إذا ÙØ¶ØÙØ§ÙØ§ ØµØ±Ø§ØØ© ٠ث٠âclass class rabbit Extended Objectâ Ø ÙØ³ØªÙÙ٠اÙÙØªÙجة ٠ختÙÙØ© ع٠âclass rabbitâ Ø¨Ø³ÙطةØ
٠اÙ٠اÙÙØ±ÙØ
ÙÙ٠ا ÙÙ٠٠ثا٠ÙÙ Ø«Ù ÙØ°Ø§ Ø§ÙØ±Ù ز (ÙØ§ ÙØ¹Ù Ù â ÙÙ Ø§Ø°Ø§Ø Ø¥ØµÙØ§ØÙØ):
class Rabbit extends Object {
constructor(name) {
this.name = name;
}
}
let rabbit = new Rabbit("Rab");
alert( rabbit.hasOwnProperty('name') ); // Error
Ø£ÙÙØ§Ù Ø Ø¯Ø¹ÙØ§ ÙØ±Ù Ù٠اذا ÙØ§ ÙØ¹Ù ٠اÙÙÙØ¯ Ø§ÙØ£Ø®Ùر.
ÙØµØ¨Ø Ø§ÙØ³Ø¨Ø¨ ÙØ§Ø¶ØÙا إذا ØØ§ÙÙÙØ§ تشغÙÙÙ. ÙØ¬Ø¨ عÙÙ Ù ÙÙØ´Ø¦ اÙÙØµÙ اÙÙ ÙØ±ÙØ« استدعاء `` super () `. ÙØ¥Ùا ÙÙÙ ÙØªÙ ØªØØ¯Ùد âÙØ°Ø§â ".
Ø¥Ø°Ù ÙØ°Ø§ ÙÙ Ø§ÙØ¥ØµÙاØ:
class Rabbit extends Object {
constructor(name) {
super(); // need to call the parent constructor when inheriting
this.name = name;
}
}
let rabbit = new Rabbit("Rab");
alert( rabbit.hasOwnProperty('name') ); // true
ÙÙÙ ÙØ°Ø§ ÙÙØ³ ÙÙ Ø´ÙØ¡ بعد.
ØØªÙ بعد Ø§ÙØ¥ØµÙØ§Ø Ø ÙØ§ ÙØ²Ø§Ù ÙÙØ§Ù Ø§Ø®ØªÙØ§Ù Ù ÙÙ ÙÙ âclass rabbit ÙÙØ³Ø¹ اÙÙØ§Ø¦Ùâ âÙ ÙØ§Ø¨Ùâ class Rabbit ".
Ù٠ا ÙØ¹ÙÙ Ø ÙØ¥Ù Ø§ÙØµÙغة âØ§ÙÙ Ù ØªØ¯Ø©â ØªØ¶Ø¹ ÙÙ ÙØ°Ø¬Ù٠أÙÙÙÙÙ:
- بÙÙ âØ§ÙÙÙ ÙØ°Ø¬â ÙÙØ¸Ø§Ø¦Ù اÙÙ ÙØ´Ø¦ (ÙÙØ·Ø±Ù).
- بÙÙ ÙØ¸Ø§Ø¦Ù اÙÙ ÙØ´Ø¦ Ø£ÙÙØ³ÙÙ (ÙÙØ£Ø³Ø§ÙÙØ¨ Ø§ÙØ«Ø§Ø¨ØªØ©).
ÙÙ ØØ§ÙØªÙØ§ Ø ØªØ¹ÙÙ ÙÙÙ Ø© âØ£Ø±ÙØ¨ Ù٠تد اÙÙØ§Ø¦Ùâ ٠ا ÙÙÙ:
class Rabbit extends Object {}
alert( Rabbit.prototype.__proto__ === Object.prototype ); // (1) true
alert( Rabbit.__proto__ === Object ); // (2) true
إذ٠ÙÙÙØ± âØ§ÙØ£Ø±ÙØ¨â Ø§ÙØ¢Ù Ø¥Ù ÙØ§ÙÙØ© اÙÙØµÙ٠إÙÙ Ø§ÙØ£Ø³Ø§ÙÙØ¨ Ø§ÙØ«Ø§Ø¨ØªØ© ÙÙ âØ§ÙÙØ§Ø¦Ùâ Ø¹Ø¨Ø± âØ§ÙØ£Ø±ÙØ¨â Ø عÙ٠اÙÙØÙ Ø§ÙØªØ§ÙÙ:
class Rabbit extends Object {}
// normally we call Object.getOwnPropertyNames
alert ( Rabbit.getOwnPropertyNames({a: 1, b: 2})); // a,b
ÙÙÙ٠إذا ÙÙ
ÙÙÙ ÙØ¯ÙÙØ§ Extended Object Ø ÙÙÙ ÙØªÙ
تعÙÙÙRabbit .__ proto__ عÙÙ Object.
ÙÙØ§ ÙÙ Ø§ÙØ¹Ø±Ø¶ Ø§ÙØªÙØ¶ÙØÙ:
class Rabbit {}
alert( Rabbit.prototype.__proto__ === Object.prototype ); // (1) true
alert( Rabbit.__proto__ === Object ); // (2) false (!)
alert( Rabbit.__proto__ === Function.prototype ); // as any function by default
// error, no such function in Rabbit
alert ( Rabbit.getOwnPropertyNames({a: 1, b: 2})); // Error
ÙØ°Ø§ Rabbit ÙØ§ ÙÙÙØ± اÙÙØµÙ٠إÙÙ Ø§ÙØ£Ø³Ø§ÙÙØ¨ Ø§ÙØ«Ø§Ø¨ØªØ© ÙÙ âØ§ÙÙØ§Ø¦Ùâ ÙÙ ÙØ°Ù Ø§ÙØØ§ÙØ©.
باÙÙ
ÙØ§Ø³Ø¨Ø© Ø ÙØØªÙÙ Function.prototype عÙÙ Ø·Ø±Ù ÙØ¸ÙÙÙØ©" عاÙ
Ø© "Ø Ù
Ø«Ùcall Ùbind ÙÙ
ا Ø¥Ù٠ذÙÙ. ÙÙÙ Ù
ØªØ§ØØ© Ù٠اÙÙÙØ§ÙØ© ÙÙ ÙÙØªØ§ Ø§ÙØØ§ÙØªÙÙ Ø ÙØ£Ù Ù
ÙÙØ´Ø¦ Object اÙÙ
دÙ
ج ØObject .__ proto__ = == Function.prototype.
ÙØ§ ÙÙ Ø§ÙØµÙرة:
ÙØ°ÙÙ Ø Ø¨Ø§Ø®ØªØµØ§Ø± Ø ÙÙØ§Ù Ø§Ø®ØªÙØ§ÙاÙ:
| class Rabbit | class Rabbit extends Object |
|---|---|
| â | needs to call super() in constructor |
Rabbit.__proto__ === Function.prototype |
Rabbit.__proto__ === Object |