JavaScript揭示模块模式-变量不变

时间:2019-12-11 23:14:52

标签: javascript module

im使用了稍微修改的显示模块模式,并且在模块内部对其进行更改后获取公共变量值存在一些问题。让我们来看看。 简单模块:

const MyModule = (function() {
  let _pretendsToBePublic = '';

  const _module = {
    publicVariable: _pretendsToBePublic,
    init() {
      _pretendsToBePublic = 2;
    },
    change(val) {
      _pretendsToBePublic = val;
    }
  };
  return _module;
})();
MyModule.init();
console.log(MyModule.publicVariable); // ''
MyModule.change(333); //still ''
console.log(MyModule.publicVariable);

我想念什么吗?

1 个答案:

答案 0 :(得分:2)

如果您希望普通引用 MyModule.publicVariable返回私有_pretendsToBePublic,则需要将其设置为 getter :< / p>

const MyModule = (function () {
    let _pretendsToBePublic = '';

    const _module = {
        get publicVariable() {
          return _pretendsToBePublic;
        },
        init() {
            _pretendsToBePublic = 2;
        },
        change(val) {
            _pretendsToBePublic = val;
        }
    };
    return _module;
})();
MyModule.init();
console.log(MyModule.publicVariable) // 2
MyModule.change(333);
console.log(MyModule.publicVariable) // 333

或者您可以将其转换为标准函数,从而使使用者更清楚地知道您正在调用功能,而不仅仅是获取简单的属性:

const MyModule = (function () {
    let _pretendsToBePublic = '';

    const _module = {
        getPublicVariable() {
          return _pretendsToBePublic;
        },
        init() {
            _pretendsToBePublic = 2;
        },
        change(val) {
            _pretendsToBePublic = val;
        }
    };
    return _module;
})();
MyModule.init();
console.log(MyModule.getPublicVariable()) // 2
MyModule.change(333);
console.log(MyModule.getPublicVariable()) // 333