如果我有这样的模块:
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
对象吗?
问题:
有没有办法将方法添加到模块中,该模块作为依赖项加载并且所有模块都可以使用这些方法,这需要这种依赖性?
答案 0 :(得分: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;
});
例如,如果对象A
注入将在对象B
中使用的新方法,但在未加载B
时调用A
则会出现错误Object #<Object> has no method 'newMethod'