背景:
基于关于how to expose a library for unit testing with Jest的问题。现在,我想创建一个可以在点符号内使用点符号调用的函数类(这甚至可能无法实现)。首先,我正在使用一些方法:

这是我如何修改JavaScript Math函数的示例:

Math.mean = function(numericArray){
    if(Math.isNumericArray(numericArray)){
        return math.mean(numericArray);
    }
    return false;
}


仅供参考,小写的math.mean()调用是对数学库https://mathjs.org/的,而isNumericArray只是一个验证器,以确保传入的是数字数组。

然后我将其导出为:

module.exports.mean = exports = Math.mean;


因此Jest可以在我的单元测试中看到它。

我的实际问题:
我想做的是创建一个名为Math.acs的上层“类”,因此您可以使用Math.acs对其进行调用。然后它将具有子功能(例如:foo()和bar()),因此您可以这样称呼它们:Math.acs.foo(data);或Math.acs.bar(data);

我试图encapsulate them into an IIFE

Math.acs = (function(data) {
    function foo(data){
        console.log('hi mom');
    };
    function bar(data){
        console.log("hi dad");
    }
    return bar;
})();


哪个不起作用(CLI在Math.acs之下看不到任何东西),我还尝试了在不起作用的函数内部使用直接函数。

如果这不可能的话,我不会死,但是它将使acs模块中所需的一半左右功能集中并且易于维护。如果不可能,我可以按照上面显示的方式编写各个数学模块。

最佳答案

您需要使用带有属性的函数并返回此函数。

Math.acs = (function(data) {
    function f() {};
    f.foo = function (data) { console.log('hi mom'); };
    f.bar = function (data) { console.log("hi dad"); };
    return f;
})();

关于javascript - 创建可以用点表示法调用的子函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55857281/

10-15 20:41