بازگشت به درس

تفاوت بین فراخوانی‌ها

اهمیت: 5

بیایید یک شیء rabbit جدید ایجاد کنیم:

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

let rabbit = new Rabbit("خرگوش");

این فراخوانی‌ها همین کار را می‌کنند یا نه؟

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

اولین فراخوانی this == rabbit دارد، سایر فراخوانی‌ها this برابر با Rabbit.prototype دارند، زیرا در واقع شیء قبل از نقطه است.

بنابراین فقط اولین تماس خرگوش را نشان می‌دهد، سایر تماس‌ها undefined را نشان می‌دهند:

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

let rabbit = new Rabbit("خرگوش");

rabbit.sayHi();                        // خرگوش
Rabbit.prototype.sayHi();              // undefined
Object.getPrototypeOf(rabbit).sayHi(); // undefined
rabbit.__proto__.sayHi();              // undefined