2014-11-20 51 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_; 
}; 
相關問題