gpt4 book ai didi

javascript - 无法修改nodejs模块值

转载 作者:太空宇宙 更新时间:2023-11-04 02:53:32 24 4
gpt4 key购买 nike

我想用一些默认值初始化一个模块,并在需要时更改它们。为此,我有一个包含 _state 值的模块/单例。我已经公开了一个 setter 方法来更新该值。但是,setter 不会更新 _state 成员变量。代码如下所示:

var StateObject = function () {
var _state = { a: 1 };
return {
state : _state,
setState : function (s) {
_state = s;
}
};
}();
modules.export = StateObject;

和调用函数:

var SO = require('./state-object');
console.log(SO.state.a); // prints 1
SO.setState({a: 2});
console.log(SO.state.a); // still prints 1

谁能解释一下是什么原因导致这个问题以及是否有解决办法?

最佳答案

这样的解决方案的潜在陷阱是,如果某段代码在本地存储 SO.state 并引用它。如果发生这种情况并且您稍后调用 setState(),则该代码段中的引用将不会更新。当您替换整​​个状态而不仅仅是状态中的单个值时,需要注意这一点。

这里的问题与引用有关。当您执行 StateObject() 时,state 变量存储对 _state 的初始引用。然后,当您调用 setState() 时,您会覆盖 _state,但 state 仍保留先前的引用。

你可以尝试这样的事情:

modules.export = {
state: { a: 1 },
setState: function(v) {
this.state = v;
}
};

关于javascript - 无法修改nodejs模块值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26897550/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com