nodejs - 从子模块调用父模块内的函数

时间:2014-11-21 21:20:33

标签: javascript node.js

假设我有一个名为parent.js的文件,其中包含以下源代码:

var child = require('./child')

var parent = {
    f: function() {
        console.log('This is f() in parent.');
    }
};

module.exports = parent;

child.target();

以及名为child.js的文件,其中包含以下源代码:

var child = {
    target: function() {
        // The problem is here..
    }
}

module.exports = child;

我使用以下命令执行该文件:

node parent.js

问题是,我想直接在f()内执行child.js而不使用任何require(...)语句。以前,我正在尝试在target()中的child.js内执行此语句:

module.parent.f()

module.parent.exports.f()

但它不起作用。奇怪的是,当我在console.log(module.parent.exports)内执行child.js时,会出现以下输出:

{ f: [Function] }

那为什么我不能直接拨打f()

3 个答案:

答案 0 :(得分:2)

您可以考虑使用回调函数:

var child = {
    target: function( callback ) {
        callback();
    }
}

module.exports = child;

然后在parent.js中调用目标:

child.target( parent.f );

答案 1 :(得分:0)

作为Lee Jenkins建议的替代方案,您可以将代码更改为此(如果不显示代码,很难解释)

parent.js

var parent = {
    f: function() {
        console.log('This is f() in parent.');
    }
};

var child = require('./child')(parent);

module.exports = parent;

child.target();

child.js

module.exports = function (parent) {
    return child = {
        target: function() {
            parent.f();
        }
    };
}

答案 2 :(得分:0)

您还可以尝试使用require.main (不赞成使用module.parent)来访问父功能。

parent.js

var parent = {} 

parent.f = function(){
      console.log('called parent function from child');
    }

module.exports = {
  parent:parent
}

var child = require('./child.js');

child.js

var child = {};
var parent = require.main.exports.parent;

child.f = function(){
  parent.f();
}

//call parent function here
child.f();

module.exports = {
  child:child
}