向现有模块化模式对象添加新方法

时间:2013-03-13 09:40:10

标签: javascript design-patterns closures

我有以下模块,有两种方法,A()B()

var Module = (function() {

    function A(){
      console.log("Module: A");
      B();
    };

    function B(){
       console.log("Module: B");
       Module.Utils.C(); /* Here is the problem */
    };

    return {
      A:A,
      B:B
    }

} ());

说我想添加一个新方法C() ...

function C(){
      console.log("C");
    };

...不触及上述模块,即我不想更改Module的现有代码,而是将其扩展为具有新的C属性。

2 个答案:

答案 0 :(得分:2)

模块定义后,您需要执行以下操作:

Module.Utils = Module.Utils || {};
Module.Utils.C = function(){
  console.log("C");
};

第一行检查Module.Utils是否已经定义,如果不是,则定义它。然后下一部分分配函数C。

如果您尝试执行Module.Utils.C = function(){ console.log("C"); };,则会收到有关未定义Module.Utils的错误。

我在这里创建了一个小提琴,显示它有效:http://jsfiddle.net/u5R4E/

答案 1 :(得分:0)

您可以动态添加方法:

Module.Utils.C = function(){
  console.log("C");
};