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

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

هيا نقوم بإنشاء كائن جديد يسمي 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