【问题标题】:ES5 Module pattern usageES5 模块模式使用
【发布时间】:2020-01-03 11:00:17
【问题描述】:

您能否向我解释一下这两种方法(FirstModule 和 SecondModule:

var MyModule = (function () {
    return {
        method: function () {
            console.log("MyModule:method");
        }
    }
})();

var FirstModule = (function () {
    return {
        test: function () {
            MyModule.method();
        }
    }
})();

var SecondModule = (function (myMethod) {
    return {
        test: function () {
            myMethod.method(); 
        }
    }
})(MyModule);

在这两种情况下,我们都有相同的对象,它不是副本。对于任何方法的任何好的信息、优点和缺点,我将不胜感激。

【问题讨论】:

  • 在第一个中,您使用的是闭包。在第二个中,您将模块作为参数接收。

标签: javascript ecmascript-5 revealing-module-pattern


【解决方案1】:

第一种方法使用MyModule 变量,在分配FirstModule 值之后,该变量可以被模块外的其他代码覆盖。

第二个使用myMethod 变量,它不能(尽管分配给myMethod 的对象的属性 仍然可以,因为该对象仍然可以通过MyModule 变量全局使用) .

【讨论】:

  • 所以……它们是一样的吗? ?
  • @Sheraff — 不,他们不是。
  • 在这两种情况下,MyModule.method = () => console.log('hello') 都会使 .test 登录 "hello"
  • @Sheraff — 我在回答中说过。我也说过MyModule = {}会有不同的结果。
  • 哦,我没想到这一点,是吗!也许为了让你的答案更清楚(因为我第一次阅读它时并不明显),你可以说一个持有对对象的引用,而另一个直接调用对象通过变量名,这意味着如果我们将变量重新分配给其他东西,一个仍然具有对原始对象的引用而另一个没有。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-12
  • 2016-03-04
  • 1970-01-01
  • 1970-01-01
  • 2020-03-21
  • 2016-07-01
  • 2017-04-09
相关资源
最近更新 更多