为什么以下代码不会更改Node.js中对象的属性

时间:2012-04-04 01:09:17

标签: javascript node.js

假设我按如下方式设置test2.js

module.exports.doPrint = doPrint;

var dummy = "initial";

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

然后我有test1.js

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

当我运行test1.js时,我得到以下内容

initial
changing
initial
changing

换句话说,test2.js中dummy的值永远不会更改为新值。有人能解释一下这里发生了什么吗?

1 个答案:

答案 0 :(得分:2)

它不会更改值,因为dummy是一个局部变量(无法从外部访问 - module本地的变量将是私有的)。要使其有效,您可以将test2.js更改为:

module.exports.doPrint = doPrint;

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

<小时/> 或使用:

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

test2.set("new value");更改值,如果您希望它是局部变量。