我正在尝试转换经典的JavaScript" class"进入AMD模块。但是,我还需要继续将类导出到全局命名空间,因为一些遗留代码需要它。我已经尝试了this
,但是没有创建全局对象。我做错了什么?
define('VisitorManager', function () {
var VisitorManager = function () {
"use strict";
// ...
};
VisitorManager.prototype.hasExistingChat = function () {
// ...
};
//expose globally
this.VisitorManager = VisitorManager;
//return AMD module
return VisitorManager;
});
答案 0 :(得分:3)
要全局公开您的模块,您需要在全局对象中注册它。
在浏览器中,全局对象为window
:
window.VisitorManager = VisitorManager;
在Node.js环境中,全局对象称为GLOBAL
:
GLOBAL.VisitorManager = VisitorManager;
要在旧版环境和RequireJS中使用该类,您可以使用此技巧:
(function() {
var module = function() {
var VisitorManager = function() {
"use strict";
// ...
};
// Return the class as an AMD module.
return VisitorManager;
};
if (typeof define === "function" && typeof require === "function") {
// If we are in a RequireJS environment, register the module.
define('VisitorManager', module);
} else {
// Otherwise, register it globally.
// This registers the class itself:
window.VisitorManager = module();
// If you want to great a global *instance* of the class, use this:
// window.VisitorManager = new (module())();
}
})();