javascript - 如何降低根据数据类型回调的函数的复杂性?

标签 javascript function callback ecmascript-6

我正在调整我的身份验证 JavaScript 模块,以便我可以使用一个 JavaScript 类 Hook .js-auth-ui 处理我的 Web 应用程序的身份验证,同时使用数据类型属性来引用正确的函数.

扫描 DOM 中的 js Hook 后,我通过 init 函数运行它,如下所示,该函数又运行一个 exec 函数,该函数回调正确的函数。

我想知道是否有一种更有效的方法来编写 execAuthUi 函数,而无需使用所有 else if,这会根据我的 linting 规则增加其“复杂性”评级。

const execAuthUi = function ( $element ) {
    const data = $element.data();

    if (data.type === "account-login-form") {
        authLoginEmail( $element, data );
    } else if (data.type === "account-logout") {
        authLogout( $element );
    } else if (data.type === "account-reset") {
        authReset( $element );
    } else if (data.type === "account-signup-form") {
        authSignup( $element );
    }
};

const initAuthUi = function ( ) {
    const $notLoaded = $_jsElements.not( ".is-initialized" );
    let $element = null;
    let i = $notLoaded.length;

    for ( i; i--; ) {
        $element = $_jsElements.eq( i );

        $element.addClass( "is-initialized" );

        execAuthUi( $element );
    }
};

最佳答案

使用对象映射类型到回调:

var callbackMap = {
    'account-login-form': authLoginEmail.bind(null, $element, data),
    'account-logout': authLogout.bind(null, $element),
    ...
};

callbackMap[data.type] && callbackMap[data.type]();

关于javascript - 如何降低根据数据类型回调的函数的复杂性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37245239/

相关文章:

使用类型为 "struct student"的数组参数进行 C 编程与类型为 "struct student *"的参数不兼容错误

php - 将数组发送到php中的函数

javascript - 将附加对象传递给第 3 方回调

javascript - jQuery 更改以返回选中或未选中状态

javascript - 后台 HTML 监听器

javascript - 对 javascript 键名进行排序

javascript - 当文本从 MS Word 粘贴到文本区域时如何捕获格式?

javascript - 在单个 div 中滚动会导致重叠

javascript - 将值从函数内部传递给 JavaScript 中的参数

jquery - 使用 JSON 对 jQuery 函数进行排序