例如:
function Car () {
this.x = 0;
}
Car.prototype.go = function () {
this.x += 20;
}
var car = new Car();
car.go(); // adds 20 to car.x, not car.prototype.x??
这是否与new关键字有关?新关键字与原型的交互方式究竟如何?在调用new关键字之前,原型存在,所以我很好奇new关键字如何抓取上下文并将其应用于原型函数
答案 0 :(得分:2)
这与原型无关;这就是函数调用的工作原理。如果您将某个功能称为one.two.three
,则this
会变为one.two
。
var foo = { a: function() { this.b = 20; } };
foo.a();
console.log(foo);
定义函数的位置和方式无关紧要,只关系它的调用方式。 (尝试直接调用Car.prototype.go()
,看看会发生什么。)
另请参阅:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this