模块模式:限制模块被扩展

Module Pattern: Restrict a module from being extended

我一直在阅读 Javascript 中关于设计模式的几篇文章。我发现模块模式很容易 read/write。

我想知道是否有任何方法可以停止扩展 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 || {});

如果我在 运行 上面的代码片段之后执行 console.log(MODULE),那么我会得到两个用于 MODULE (incr, extension)

的函数

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

您可以冻结返回的对象

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

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

  return Object.freeze({
    incr: funcIncrement
  });
})();

但旧版浏览器不支持。