为什么我的模块Javascript代码段在私有变量上返回未定义的值?
我很难理解为什么我的JS代码段在控制台窗口中返回未定义为什么我的模块Javascript代码段在私有变量上返回未定义的值?,javascript,Javascript,我很难理解为什么我的JS代码段在控制台窗口中返回未定义 var myModule = (function(){ var _myVal; function _setMyVal(arg){ _myVal = arg; } return { myVal : _myVal, setMyVal : _setMyVal }; }()); myModule.setMyVal("ss"); console.log(myModule.myVal);
var myModule = (function(){
var _myVal;
function _setMyVal(arg){
_myVal = arg;
}
return {
myVal : _myVal,
setMyVal : _setMyVal
};
}());
myModule.setMyVal("ss");
console.log(myModule.myVal);
因为直接设置myModule.myVal实际上是有效的
return {
myVal : _myVal,
setMyVal : _setMyVal
};
您返回的是_myVal的当前值,而不是您想要的对它的引用。在函数中重新分配变量_myVal后,myModule.myVal仍指向旧值
如果要返回引用,可以使用getter返回它:
return {
get myVal() {return _myVal},
setMyVal : _setMyVal
};
这就是JavaScript处理变量和对象属性的方式
var x = 2;
var y = {x: x}; // at this point, y.x is set to the number two,
// it bears no reference to the variable x
console.log(x, y.x); // 2 2
x = 3
console.log(x, y.x); // 3 2
myModule是一个已经被调用的IILife,将myVal设置为Undefined答案很好,虽然我不喜欢“get”关键字,但我没有看到太多,担心它会让人困惑。我已经重构为两种方法,因为它看起来更正交。。。。getter将“get”隐藏在内部函数中。getReferences:_getReferences,setReferences:_setReferences