为什么x的值没有更新?代码有什么问题吗?i';我是javascript新手

为什么x的值没有更新?代码有什么问题吗?i';我是javascript新手,javascript,module,node-modules,es6-modules,revealing-module-pattern,Javascript,Module,Node Modules,Es6 Modules,Revealing Module Pattern,var ModuelPattern=(函数(){ var x=“A” var change=function(){ 如果(x==“A”){ x=“B” } 否则{ x=“A” } } 返回{ x:x, f:零钱 } })(); ModuelPattern.f() log(ModuelPattern.x) 使用关键字访问对象自身的属性 var ModuelPattern=(函数(){ 这个。x=“A” this.change=function(){ if(this.x==“A”){ 此选项。x=

var ModuelPattern=(函数(){
var x=“A”
var change=function(){
如果(x==“A”){
x=“B”
}
否则{
x=“A”
}
}
返回{
x:x,
f:零钱
}
})();
ModuelPattern.f()
log(ModuelPattern.x)
使用关键字访问对象自身的属性

var ModuelPattern=(函数(){
这个。x=“A”
this.change=function(){
if(this.x==“A”){
此选项。x=“B”
}
否则{
这个。x=“A”
}
}
返回{
x:这个,
f:这是零钱
}
})();
log(ModuelPattern.x)
ModuelPattern.f()

console.log(ModuelPattern.x)
您可以在返回的对象中创建
x
一个getter函数:

var ModuelPattern=(function () {
    var x="A"
    var change=function(){
        if(x==="A"){
            x="B"
        }
        else{
            x="A"
        }
    }
    return{
        get x() { return x; },
        set x(_) {},
        f:change
    }
  })();
  
  ModuelPattern.f()
  console.log(ModuelPattern.x)

这允许返回的对象访问通过调用原始工厂函数形成的闭包中的局部变量。我添加了一个虚拟setter函数作为说明。

这改变了OP中代码的语义。构造函数中的变量
x
(来自OP)不能通过对象上的属性名“x”直接看到;在你的回答中,是的。