2012-04-04 2 views
0

Angenommen test2.js I Setup ändernWarum wird der folgende Code nicht die Eigenschaft, in meinem Objekt in Node.js

module.exports.doPrint = doPrint; 

var dummy = "initial"; 

function doPrint(callback) { 
    setInterval(function() { 
     console.log(dummy); 
     callback(); 
    }, 1000); 
} 

folgt ich dann test1.js haben

var test2 = require("./test2"); 
test2.doPrint(function() { 
    console.log("changing"); 
    test2.dummy = "new value"; 
}); 

Wenn ich laufen test1.js bekomme ich folgende

initial 
changing 
initial 
changing 

mit anderen Worten: der Wert der Dummy in test2.js nie auf den neuen Wert geändert wird. Kann jemand erklären, was hier passiert?

Antwort

2

Der Wert wird nicht geändert, da dummy eine lokale Variable ist (auf die von außen nicht zugegriffen werden kann - die lokalen Variablen module sind privat). Damit es funktioniert Sie test2.js dazu ändern können:

module.exports.doPrint = doPrint; 

function doPrint(callback) { 
    var that=this; 
    this.dummy = "initial"; 
    setInterval(function() { 
     console.log(that.dummy); 
     callback(); 
    }, 1000); 
} 


oder -nutzung:

module.exports.doPrint = doPrint; 
module.exports.get = get; 
module.exports.set = set; 

var dummy = "initial"; 

function get(){ 
    return dummy 
} 

function set(new_value){ 
    dummy=new_value; 
} 


function doPrint(callback) { 
    setInterval(function() { 
     console.log(dummy); 
     callback(); 
    }, 1000); 
} 

und test2.set("new value");, um den Wert zu ändern, wenn Sie es wollen eine lokale Variable sein.

Verwandte Themen