Nodejs util.inherits 产生意想不到的结果



以下代码总是打印 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());
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()实例时,将所有实例上的getMakesetMake函数更改回1。然后,当您调用setMake时,它会更改每个实例的make

您需要将它们显式分配给Car的单个实例,例如

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_;
};

最新更新