functs.js
function functs(...f) {
    /**
     * execute all included functions
     * @param {...*} [args] - arguments passed to all included functions
     * @returns {*[]}
     */
    function functs(...args) {
        return functs.run(this, args);
    }

    if(Array.isArray(f[0])) {
        f = f[0];
    }
    
    functs._f = f.filter((f) => {
        return typeof f === 'function';
    });
    functs.add = add.bind(functs);
    functs.remove = remove.bind(functs);
    functs.run = run.bind(functs);
    return functs;
}
function functs(...f) {
    /**
     * execute all included functions
     * @param {...*} [args] - arguments passed to all included functions
     * @returns {*[]}
     */
    function functs(...args) {
        return functs.run(this, args);
    }

    if(Array.isArray(f[0])) {
        f = f[0];
    }
    
    functs._f = f.filter((f) => {
        return typeof f === 'function';
    });
    functs.add = add.bind(functs);
    functs.remove = remove.bind(functs);
    functs.run = run.bind(functs);
    return functs;
}
function functs ( ... f ) { /**
     * execute all included functions
     * @param {...*} [args] - arguments passed to all included functions
     * @returns {*[]}
     */ function functs ( ... args ) { return functs . run ( this , args ) ; } if ( Array . isArray ( f [ 0 ] ) ) { f = f [ 0 ] ; } functs . _f = f . filter ( ( f ) => { return typeof f === 'function' ; } ) ; functs . add = add . bind ( functs ) ; functs . remove = remove . bind ( functs ) ; functs . run = run . bind ( functs ) ; return functs ; }
merge multiple functions into one
@param {...function} [f] - functions to merge
@returns {function}
merge multiple functions into one