Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 需要一个模块,就像它的模块是您需要它的模块一样_Javascript_Node.js - Fatal编程技术网

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方法的情况下,有没有办法做到这一点?如果那不可能,那就回答我的主要问题。如果不可能的话,你的解决方案会给我一个选择。如果有这种方法,我还没有找到。好吧,这就是我所怀疑的。我将把这个作为一个答案,这是不可能的,然后选择使用你的方法:-)。谢谢