在模块之间分配功能

时间:2017-01-14 12:17:49

标签: javascript node.js

我有一个模块,我想将一个函数分配给一个公共变量,然后使用该模块中的函数。请参阅下面的示例,了解我认为我能够做到的事情。

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
    }
}());

由于我不认为这是一个非常优雅的解决方案,我想知道是否有替代方案,也许某种方式让前两个片段按照意图工作,或者我是否坚持使用setter方法

1 个答案:

答案 0 :(得分:0)

function callSomeFunction() {
    someFunction();
}

callSomeFunction的定义时间早于someFunction(称为hoisting)。

导致以下定义顺序:

1. callSomeFunction
2. someFunction

您应该将此功能更改为constlet存储,就像您使用someFunction一样,或将它们都设为function