Я хочу передать параметр другому модулю, а затем вызвать функцию из этого модуля (Node.js ver 6.11):
//app.js *********
myService = require(‘./lib.js’)(“Hello World”);
myService.printMessage();
//lib.js **********
var msgToPring;
module.exports = function libService(msg) {
msgToPring = msg;
function printMessage(){
console.info(msgToPring);
}
}
когда я запускаю программу, она не работает в app.js во «второй» строке:
Cannot read property 'printMessage' of undefined
Что я делаю не так?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Две вещи:
Вы структурировали свою библиотеку как функцию, а не как объект, класс или конструктор. На printMessage нельзя ссылаться вне libService.
Строку импорта следует рассматривать как объявление, а позже вызывать функцию отдельно.
//app.js *********
myService = require(‘./lib.js’);
myService("Hello World");
//lib.js **********
var msgToPring;
module.exports = function libService(msg) {
msgToPring = msg;
function printMessage(){
console.info(msgToPring);
}
printMessage(msgToPring);
}
Если хотите, вы можете переместить объявление printMessage за пределы функции libService.
libService должен вернуть объект
module.exports = function libService( msg ) {
let msgToPrint = msg;
return {
printMessage() {
console.info(msgToPrint);
}
}
}
в этом случае будет ли функция printMessage () иметь доступ к другим внутренним функциям libService? Допустим, pringMessage () вызывает другую функцию func () внутри функции libService (). Итак, если я вызову pringMessage () из app.js, не произойдет ли сбой?
вы будете использовать ключевое слово this для доступа к методам
1.
myService- это не объект, а функция, 2. возвращаемое значение libService должно быть объектом.