2014-11-20 114 views
0

以下代码总是打印它应该打印的地方任何关于我在做什么错误的建议?或者这是预期的?Nodejs util.inherits产生意想不到的结果

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
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_; 
}; 
相关问题