نريد أن نتيح هذا المشروع المفتوح المصدر إلى كل الناس حول العالم. من فضلك ساعدنا على ترجمة محتوى هذه السلسله للغة التى تعرفها.
الرجوع الي الدرس

الفرق بين الإستدعاءات

هيا نقوم بإنشاء كائن جديد يسمي rabbit:

function Rabbit(name) {
  this.name = name;
}
Rabbit.prototype.sayHi = function() {
  alert(this.name);
};

let rabbit = new Rabbit("Rabbit");

هل هذه الإستدعاءات تقوم بنفس الوظيفة أم لا؟

rabbit.sayHi();
Rabbit.prototype.sayHi();
Object.getPrototypeOf(rabbit).sayHi();
rabbit.__proto__.sayHi();

الإستدعاء الأول تكون this == rabbit والآخرين تكون قيمة this مساوية لـ Rabbit.prototype وذلك لأنه الكائن قبل النقطة.

وبالتالى فإن أول استدعاء فقط يعرض Rabbit والباقى يعرضون undefined:

function Rabbit(name) {
  this.name = name;
}
Rabbit.prototype.sayHi = function() {
  alert( this.name );
}

let rabbit = new Rabbit("Rabbit");

rabbit.sayHi();                        // Rabbit
Rabbit.prototype.sayHi();              // undefined
Object.getPrototypeOf(rabbit).sayHi(); // undefined
rabbit.__proto__.sayHi();              // undefined
Morty Proxy This is a proxified and sanitized view of the page, visit original site.