看书看到的例子:
var Car = function (wheelCount) {
this.wheels = wheelCount || 4;
}
Car.prototype.odometer = 0;
Car.prototype.drive = function (miles) {
this.odometer += miles;
return this.odometer;
}
var tesla = new Car();
Car.prototype.odometer = 200;
tesla.drive(10) //210
Car.prototype.odometer = 2000;
tesla.drive(10) //220
第二次调用tesla.drive(10)时是220而不是2010,我的理解是因为实例化对象在调用函数以后其内部创建了自己的odometer变量环境就与原型无关了,书上没有说明原因不知道我理解的对不对,还望指教。谢谢。
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
你的代码
这样改一下,因为在原型里面用this.xxx =yyy 赋值,如果不存在会创建对象的属性,下一次再操作原型,显示的就是属性的值,而不是原型上的值。
这是你要的效果
你这里的this.odometer是+=,分解之后其实是this.odometer=this.odometer+xx。
也就是this.odometer=this.__proto__.odometer+xx。
所以是取原型的值来设置对象的属性值。
操作的是对象的odometer属性不是原型上的odometer吧
this.odometer += miles;赋值的时候由于本身没有odometer会自身创建一个属性,所以下一次调用的时候就调用自身的odometer是210
drive方法中,
this.odometer += miles;语句中的this是实例化对象,即tesla。你return的也是tesla的odometer属性。