背景: 以关于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模块中所需的大约六种功能集中并且易于维护。如果不可能,我可以按照上面显示的方式编写各个数学模块。
答案 0 :(得分:2)
您需要使用具有属性的函数并返回此函数。
Math.acs = (function(data) {
function f() {};
f.foo = function (data) { console.log('hi mom'); };
f.bar = function (data) { console.log("hi dad"); };
return f;
})();