假设我有一个名为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()
?
答案 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
}