返回課程

呼叫之間的差異

重要性:5

讓我們建立一個新的 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