5

我有以下具有两种方法的模块,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属性。

4

2 回答 2

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/

于 2013-03-13T09:57:15.477 回答
0

您可以动态地将方法添加到对象:

Module.Utils.C = function(){
  console.log("C");
};
于 2013-03-13T09:43:00.957 回答