以下代码始终打印 3 3 ,因为它应该打印 2 3 任何建议我在这里做错了什么?或者这是预期的?
var EventEmitter = require("events").EventEmitter,
util=require('util');
var Car=function(){
var self=this;
EventEmitter.call(this);
var make=1;
Car.prototype.getMake = function() {
return make;
};
Car.prototype.setMake = function(val) {
make=val;
return make;
};
}
util.inherits(Car, EventEmitter);
function Bmw(){
Car.call(this);
}
function Merc(){
Car.call(this);
}
util.inherits(Bmw, Car);
util.inherits(Merc, Car);
var car1=new Bmw();
car1.setMake(2);
var car2=new Merc();
car2.setMake(3);
console.log(car1.getMake(),car2.getMake());
答案 0 :(得分:1)
var Car = function(){
var self=this;
EventEmitter.call(this);
var make=1;
Car.prototype.getMake = function() {
return make;
};
Car.prototype.setMake = function(val) {
make=val;
return make;
};
};
没有意义。 Car.prototype.getMake
会影响Car
的每个实例,因此您基本上说的是,每次创建new Car()
实例时,都要更改getMake
和setMake
函数在所有实例上返回1
。然后,当您致电setMake
时,它会更改每个实例的make
值
您需要将它们明确地分配给Car
的单个实例。 e.g。
var Car = function(){
EventEmitter.call(this);
var make=1;
this.getMake = function() {
return make;
};
this.setMake = function(val) {
make=val;
return make;
};
};
或者将它们保留在原型上并使用不同的方法将make
的值传递给函数。
var Car = function(){
var self=this;
EventEmitter.call(this);
this.make_ = 1;
};
Car.prototype.getMake = function() {
return this.make_;
};
Car.prototype.setMake = function(val) {
this.make_ = val;
return this.make_;
};