大家好,
我试图弄清楚,为什么 Cookie 模块只能在使用 new 运算符实例化后才能访问...... 我认为如果我在 shim 配置中导出 Cookie 模块并将模块名称添加到 app.js 中的必备条件中,那么它将可以全局访问。但事实并非如此。
您能否就我的模块可能出现的问题提出建议?
cookie.js
define("Cookie",function (){
function Cookie()
{}
Cookie.prototype.add = function ()
{
doStuff();
}
Cookie.prototype.remove = function ()
{
doStuff();
}
return Cookie;
});
main.js
requirejs.config({
baseUrl: 'js/lib',
paths: {
app: '../app',
},
shim:{
Cookie: {
exports : 'Cookie'
}
}
});
app.js
define(['Cookie'],function(Cookie)
{
Cookie.add();
Cookie.remove();
}
最佳答案
这段代码有很多问题。正如安迪指出的,方式Cookie
已定义,您需要实例化它。如果您期望只有一个Cookie
您的应用程序中的实例,那么是的,return new Cookie()
会被指示,但如果您想创建许多实例,则 return Cookie
是要做的事情,然后你使用 new Cookie
在导入它的每个模块中,任何时候您需要创建 Cookie
实例。
但是,您在问题中显示的代码还存在以下其他问题:
您的文件名为
里>cookie.js
但你将其定义为Cookie
,大小写不同。经验法则:RequireJS 区分大小写,因此文件和模块名称应该对应,除非您以某种方式在其他地方覆盖它,但您显示的代码中并非如此。您使用
define('Cookie'
,它分配名称Cookie
到你的模块。 RequireJS 的文档非常明确地建议不要手动分配模块名称。r.js
当你优化时会分配名称。或者如果你不优化,那么 RequireJS 会从文件名中分配一个模块名称。当您进行优化时,如果您已经分配了名称,r.js
无法完成其工作。 (是的,有时您想自己分配名称,但如果您无法说出为什么在特定实例中您需要自己设置名称的具体原因,那么很可能你做错了。)您使用
shim
调用 RequireJS 的模块的配置define
功能。shim
选项仅适用于不调用define
的模块。如果你给出shim
到调用define
的模块你进入了未定义的行为领域,如果它有效,那只是运气。它可能现在可以工作,明天就会失败,或者当 RequireJS 引入一个新版本时,它可能会失败,该新版本确实使用shim
分配一些定义的行为。对于调用define
的模块.
关于javascript - require.js - 定义自定义模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26403551/