Javascript 需要一个模块,就像它的模块是您需要它的模块一样
我需要一个模块,并以某种方式传入当前模块,或者类似的东西,以便所需的模块具有所需模块的属性 例如,如果我需要一个文件:Javascript 需要一个模块,就像它的模块是您需要它的模块一样,javascript,node.js,Javascript,Node.js,我需要一个模块,并以某种方式传入当前模块,或者类似的东西,以便所需的模块具有所需模块的属性 例如,如果我需要一个文件: (function(global) { console.log(this.exists); }(this)); 我要求这样做: this.exists = "I exist."; var myFile = require("my-file"); // Somehow make require pass in 'this'. 所需的文件应该能够看到this.exists,
(function(global) {
console.log(this.exists);
}(this));
我要求这样做:
this.exists = "I exist.";
var myFile = require("my-file"); // Somehow make require pass in 'this'.
所需的文件应该能够看到this.exists
,因为我已经以某种方式将this
传递到require
函数中。我不确定这是否可行。我认为您需要处理不同的模块
对象
其中的一个限制是,所需的模块不能有任何nodejs
特定的东西,比如在模块上导出它的代码。它必须和我写的一样
编辑:
define(function() {
"use strict";
function init() {
console.log("this = " + this);
}
return init;
});
var myFileInit = require("my-file");
var myFile = myFileInit.init.call(this);
结果是没有办法完全按照我想要的方式来做。不过,对于如何以其他方式做到这一点,有一些很棒的建议。我曾经做过类似的事情。。。我认为最好的办法是通过一种间接的方式 第1部分:
define(function() {
"use strict";
function init() {
console.log("this = " + this);
}
return init;
});
var myFileInit = require("my-file");
var myFile = myFileInit.init.call(this);
第二部分:
define(function() {
"use strict";
function init() {
console.log("this = " + this);
}
return init;
});
var myFileInit = require("my-file");
var myFile = myFileInit.init.call(this);
编辑:另一种可能性
为原始模块创建包装器:
// my-file-wrapper
define(["my-file"], function(myFunc) {
"use strict";
function init() {
myFunc.call(this);
}
return init;
});
// Elsewhere
var myFileWrapper = require("my-file-wrapper");
var myFile = myFileInit.init.call(this);
如果可能的话,我不想修改所需的模块。这是一个很好的解决方案,如果我必须放松一下我的限制。谢谢你的更新!在没有文件包装器和init方法的情况下,有没有办法做到这一点?如果那不可能,那就回答我的主要问题。如果不可能的话,你的解决方案会给我一个选择。如果有这种方法,我还没有找到。好吧,这就是我所怀疑的。我将把这个作为一个答案,这是不可能的,然后选择使用你的方法:-)。谢谢