调用方式的差异
重要程度: 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,因为 this 就是点符号前面的对象。
所以,只有第一个调用显示 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