2017-01-14 2 views
0

У меня есть модуль, где я хочу назначить функцию для общедоступной переменной, а затем использовать функцию внутри этого модуля. См. Пример ниже для того, что я думал, что смогу сделать.Назначение функций между модулями

main.js

;(function() { 
    const test = require("./test"); 

    function newFunction() { 
     console.log("New function"); 
    } 

    // This works fine 
    test.someFunction = newFunction; 
    test.someFunction(); 

    // But this doesn't 
    test.callSomeFunction(); 
}()); 

test.js

;(function() { 
    let someFunction = function() { 
     console.log("Old function"); 
    } 

    function callSomeFunction() { 
     someFunction(); 
    } 

    module.exports = { 
     someFunction, 
     callSomeFunction 
    } 
}()); 

Чтобы сделать эту работу, я в настоящее время есть метод, чтобы установить функцию в модуле, так test.js будет выглядеть как фрагмент ниже.

test.js

;(function() { 
    let someFunction = function() { 
     console.log("Old function"); 
    } 

    function callSomeFunction() { 
     someFunction(); 
    } 

    function setSomeFunction(newFunction) { 
     someFunction = newFunction; 
    } 

    module.exports = { 
     setSomeFunction, 
     callSomeFunction 
    } 
}()); 

Поскольку я не чувствую, что это очень элегантное решение, мне было интересно, если есть альтернатива, может быть какой-то способ, чтобы получить первые два сниппеты работать как inteded, или если я застрял с методом setter.

ответ

0
function callSomeFunction() { 
    someFunction(); 
} 

callSomeFunction определено раньше во времени, чем someFunction (известный как hoisting).

Результирующее в порядке следующее определение:

1. callSomeFunction 
2. someFunction 

Вы должны либо изменить эту функцию, которая будет сохранена в const или let, как вы делали с someFunction или у них и как function.

+0

Если я чего-то не хватает, ваше решение, к сожалению, не работает. Даже при определении обеих функций либо с помощью 'let', либо' function' происходит такое же поведение, когда вызывается старая функция. – tobloef

Смежные вопросы