Nodejs util.inherits产生意外的结果

时间:2014-11-20 16:27:16

标签: node.js

以下代码始终打印 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());

1 个答案:

答案 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()实例时,都要更改getMakesetMake函数在所有实例上返回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_;
};