需要一个模块,就好像它的模块是您需要它的模块一样

时间:2014-03-30 02:40:29

标签: 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,因为我已经以某种方式将this传递到require函数中。我不确定这是否可行。我认为你需要摆弄不同的module对象。

这个的一个限制是所需的模块不能有任何nodejs特定的东西,比如将代码输出到模块上的代码。它必须与我编写它的方式保持一致。

修改

事实证明,没有办法按照我想要的方式做到这一点。不过,对于如何以其他方式执行此操作,已经提出了一些很棒的建议。

1 个答案:

答案 0 :(得分:1)

我必须做一次与此类似的事情......我想通过间接水平的最佳方式。

<强>第1部分:

define(function() {
    "use strict";

    function init() {
        console.log("this = " + this);
    }

    return init;
});

<强>第2部分:

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);