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

时间:2021-05-16 18:03:02

标签: javascript module node-modules es6-modules revealing-module-pattern

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

我无法找到一种方法来使用揭示模块模式和外部访问来更新 IIFE 内部的 x 范围

2 个答案:

答案 0 :(得分:0)

您可以在返回的对象中使 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 函数作为说明。

答案 1 :(得分:-1)

使用 this 关键字访问对象自身的属性。

var ModuelPattern=(function () {
    this.x = "A"
    this.change=function() {
        if(this.x==="A"){
            this.x = "B"
        }
        else{
            this.x = "A"
        }
    }
    return {
        x: this.x,
        f: this.change
    }
})();

console.log(ModuelPattern.x)
ModuelPattern.f()
console.log(ModuelPattern.x)