【问题标题】:Module Pattern: Restrict a module from being extended模块模式:限制模块被扩展
【发布时间】:2016-08-31 17:16:55
【问题描述】:

我已经阅读了几篇关于 Javascript 设计模式的文章。我发现模块模式易于读/写。

我想知道是否有任何方法可以停止在 Javascript 中扩展模块。

这是我一直在使用的脚本:

var MODULE = (function(){
    var increment = 0;

    var funcIncrement = function(){
        increment ++;
        console.log(increment);
    };

    return {
        incr: funcIncrement
    }
})();


var moduleTwo = (function(MODULE){
    MODULE.extension = function(){ //This module will add extension function to MODULE. I don't want this to happen
        console.log('extension method');
    }


})(MODULE || {});

如果我在运行上面的 sn-p 之后执行console.log(MODULE),那么我将获得 MODULE 的两个函数(incr,扩展)

第一次声明MODULE 时,有没有办法限制MODULE 被扩展?

【问题讨论】:

    标签: javascript design-patterns module-pattern revealing-module-pattern


    【解决方案1】:

    您可以冻结返回的对象

    var MODULE = (function(){
      var increment = 0;
    
      var funcIncrement = function(){
        increment ++;
        console.log(increment);
      };
    
      return Object.freeze({
        incr: funcIncrement
      });
    })();
    

    但旧版浏览器不支持。

    【讨论】:

    • 请注意,这仍然允许覆盖,例如MODULE = {}
    • 不幸的是,冻结在 IE8 中不起作用。除了这个还有什么好的选择吗?
    猜你喜欢
    • 2012-12-19
    • 2011-06-04
    • 1970-01-01
    • 2016-02-24
    • 2014-03-30
    • 1970-01-01
    • 1970-01-01
    • 2018-07-20
    • 1970-01-01
    相关资源
    最近更新 更多