gpt4 book ai didi

javascript - 我可以向 requirejs 模块添加一个方法作为另一个模块的依赖项,并在每次模块作为依赖项加载时都可用吗?

转载 作者:行者123 更新时间:2023-11-30 10:29:27 25 4
gpt4 key购买 nike

如果我有这样的模块:

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 对象?

问题:
有没有一种方法可以将方法添加到作为依赖项加载的模块中,并让这些方法在需要此依赖项的所有模块上可用?

最佳答案

简答:

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

长答案:

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

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

return app;
});

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

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

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

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

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

return app;
});

例如,如果对象 A注入(inject)一个将在对象 B 中使用的新方法,但是 BA 时调用未加载则将出现错误 Object #<Object> has no method 'newMethod'

关于javascript - 我可以向 requirejs 模块添加一个方法作为另一个模块的依赖项,并在每次模块作为依赖项加载时都可用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17811064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com