Создать подфункции, которые можно вызывать с помощью точечной нотации - PullRequest
1 голос
/ 25 апреля 2019

Справочная информация: Опираясь на этот вопрос о , как выставить библиотеку для модульного тестирования с помощью Jest .Теперь я хотел бы создать класс функций, которые можно вызывать с точечной нотацией внутри точечной нотации (, это даже невозможно ).Сначала немного методологии, которую я сейчас использую:

Вот пример того, как я модифицировал математические функции JavaScript:

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

FYI, строчные буквы math.mean () вызов в математическую библиотеку: https://mathjs.org/,, а isNumericArray - это просто средство проверки, чтобы убедиться, что то, что передано, является числовым массивом.

А затем я экспортирую его так:

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

Итак, Джест может увидеть это для моих модульных тестов.

Мой актуальный вопрос: Что я хочу сделать, это создать «класс» верхнего уровня с именем Math.acs, чтобы высделал бы звонок в это с Math.acs.Тогда он будет иметь подфункции (EG: foo () & bar ()), поэтому вы будете называть их так: Math.acs.foo (data);или Math.acs.bar (данные);

Я пытался инкапсулировать их во 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, централизованными и проще в обслуживании.Если это невозможно, я могу написать отдельные математические модули так же, как показано выше.

1 Ответ

2 голосов
/ 25 апреля 2019

Вам нужно взять функцию со свойствами и вернуть эту функцию.

Math.acs = (function(data) {
    function f() {};
    f.foo = function (data) { console.log('hi mom'); };
    f.bar = function (data) { console.log("hi dad"); };
    return f;
})();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...