从 RequireJS 中的 CommonJS 样式模块导出构造函数
Export a constructor from a CommonJS style module in RequireJS
我正在尝试使用 CommonJS 样式模块中的 exports
对象导出构造函数。出于某种原因,要求模块会导致空对象被 returned 而不是导出的函数。
比如这个模块;
define(function(require, exports) {
var Example = function() {
this.example = true;
};
exports = Example;
});
在另一个模块中需要它并实例化时导致 Uncaught TypeError: object is not a function
错误。
define(function(require, exports) {
var Example = require('example');
var example = new Example();
});
但是,如果我将模块修改为 return 构造函数而不是使用 exports 对象,一切都会按预期工作。
define(function(require, exports) {
var Example = function() {
this.example = true;
};
return Example;
});
这附近有没有?
就像您在 Node.js 中所做的那样,您必须分配给 module.exports
而不是 exports
本身。所以:
define(function(require, exports, module) {
var Example = function() {
this.example = true;
};
module.exports = Example;
});
分配给 exports
无效,因为 exports
是函数的局部变量。函数之外的任何东西都无法知道您已分配给它。当您分配给 module.exports
时。这是另一回事,因为您正在修改 module
所指的 对象 。
RequireJS 文档 suggests 就像您在上一个片段中所做的那样:只是 return 您要分配给 module.exports
的值。
我正在尝试使用 CommonJS 样式模块中的 exports
对象导出构造函数。出于某种原因,要求模块会导致空对象被 returned 而不是导出的函数。
比如这个模块;
define(function(require, exports) {
var Example = function() {
this.example = true;
};
exports = Example;
});
在另一个模块中需要它并实例化时导致 Uncaught TypeError: object is not a function
错误。
define(function(require, exports) {
var Example = require('example');
var example = new Example();
});
但是,如果我将模块修改为 return 构造函数而不是使用 exports 对象,一切都会按预期工作。
define(function(require, exports) {
var Example = function() {
this.example = true;
};
return Example;
});
这附近有没有?
就像您在 Node.js 中所做的那样,您必须分配给 module.exports
而不是 exports
本身。所以:
define(function(require, exports, module) {
var Example = function() {
this.example = true;
};
module.exports = Example;
});
分配给 exports
无效,因为 exports
是函数的局部变量。函数之外的任何东西都无法知道您已分配给它。当您分配给 module.exports
时。这是另一回事,因为您正在修改 module
所指的 对象 。
RequireJS 文档 suggests 就像您在上一个片段中所做的那样:只是 return 您要分配给 module.exports
的值。