2014-11-21 6 views
2

Скажем, у меня есть файл с именем parent.js со следующим исходным кодом:nodejs - Вызов функции внутри родительского модуля от модуля детского

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

В качестве альтернативы тому, что предложил Ли Дженкинс, вы можете изменить ваши код для этого (трудно объяснить, не указывая код)

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

Вы могли бы рассмотреть возможность использования функции обратного вызова:

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

module.exports = child; 

Затем в parent.js называют цель так:

child.target(parent.f); 
Смежные вопросы