将thisArg传递给require()d模块的最佳方法是什么?
我想做这样的事情:
index.js
function Main(arg) {
return {
auth: auth,
module: require('/some/module')
}
}
module.js
module.exports = {
someMethod: function() {...}
}
然后,在我的代码中我调用Main(),它返回对象。 所以Main()。auth存在,很酷。但是如何从Main()。模块访问它? Main()。module.someMethod()中的thisArg指向模块本身..但我需要父级。
如果不使用新的关键字,函数和原型,有没有办法做到这一点?
编辑:
感谢所有答案!一些额外的信息:
Main()是我想要的模块()并在我的应用程序中使用。 "模块" Main尝试导入实际上只是Main的子功能,它只是代码的一部分,我移动到一个单独的"模块"更好地组织代码。
更好的例子是:
function RestApi(param) {
return {
common_param: param,
commonFunc: function() {...}
endpoint1: require('/some/module'),
endpoint2: require('/some/module2'),
endpoint3: require('/some/module3')
}
}
我的应用会像这样使用它:
RestApi = require('./RestApi')
RestApi().endpoint1.someHTTPCall(...)
但在someHTTPCall()中," common_param"和" commonFunc"应该可以通过thisArg访问,例如this.commonFunc()。
所以这是一个普遍的问题,你如何正确地使用require()合并多个模块,所以"这个"会指向正确的对象(即:父母)
我知道这可以使用Function.prototype和继承来实现,只是想知道是否有更简单的方法。
到目前为止我发现的最好的是这样的:
var _ = require('lodash');
function Module(auth) {
this.auth = auth || {};
}
Module.prototype = {
endpoint1: function() { return _.extend(require('./endpoint1'),{auth: this.auth, commonFunc: commonFunc})}
}
function commonFunc() {...}
然而,这并不理想,因为RestApi.endpoint1()会在每次调用时创建一个新对象。
有没有更好的方法来解决这个问题?
提前致谢!
答案 0 :(得分:0)
您可以更改模块以返回功能,如下所示:
// some/module.js
module.exports = function(mainModule) {
var main = mainModule;
return {
someMethod: function() {
main.doSomethingElse();
}
}
}
然后require
传递main
对象:
function Main(arg) {
var main = {
auth: auth,
other: stuff,
};
main.module = require('/some/module')(main);
return main;
}
答案 1 :(得分:0)
使用auth param创建自己的“require”模块并始终使用它。
项目/模块/ requirejs
module.exports = function(path, auth){
if (!check(auth))
return null
return require(path)
}