如何构造原型使得函数上下文不引用`prototype`对象

时间:2015-09-21 23:13:14

标签: javascript javascript-objects prototypal-inheritance

例如:

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关键字如何抓取上下文并将其应用于原型函数

1 个答案:

答案 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