1

如果我有这样的模块:

define([
   'app'
  , 'text!index.html!strip'
  , 'css!index'
  ],
  function (App, source) {
    var response = {};

    App.newMethod = function (foo) {
      console.log("foo ="+foo);
    };

  // return response object
  return response;
  }
);

我想知道如何将方法添加到用作另一个模块中的依赖项的模块中。App当然我可以向对象添加方法,但是当从另一个模块调用对象时,这些方法也会更新对象吗?

问题
有没有办法向模块添加方法,该模块作为依赖项加载,并使这些方法在所有需要此依赖项的模块上可用?

4

1 回答 1

4

简短的回答:

是的。该模块需要是一个对象/实例(而不是一个类),它将与 requirejs 一起使用。

长答案:

当您第一次需要一个模块作为依赖项时,Requirejs 会生成一个对象,而下次您需要该模块时,Requirejs 将返回它第一次生成的对象。所以每次你需要一个模块时,你总是得到相同的对象引用。

define([], function () {
    var app =  {
        //my methods.
    };

    return app;
});

define(['app'], function (app) {
    app.newMethod = function (){
        // ...
    };
});

你可以像这样使用应用程序:

define(['app'], function (app) {
    app.newMethod();
});

但是将方法从一个对象注入另一个对象是一种非常糟糕的做法。如果您需要对象中的某些内容,只需在创建对象时添加它,而不是通过注入。

define([], function () {
    var app =  {
        newMethod: function () {
            // ...
        },
        // my methods.
    };

    return app;
});

例如,如果 objectA注入了一个将在 object 中使用的新方法B,但在未加载B时被调用,A则会出现错误Object #<Object> has no method 'newMethod'

于 2013-07-23T14:17:49.420 回答