【发布时间】:2016-05-16 00:47:13
【问题描述】:
我正在调整我的身份验证 JavaScript 模块,以便我可以使用一个 JavaScript 类挂钩 .js-auth-ui 处理我的 Web 应用程序的身份验证,同时使用数据类型属性来引用正确的函数。
在扫描 DOM 中的 js 钩子后,我通过如下所示的 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 );
}
};
【问题讨论】:
-
也许考虑一个 switch/case 语句?
-
我个人也不会考虑这个过于复杂的功能。也许你只是有一个过分热心的 linter。
-
@Spaceman 谢谢我同意,他们有点强硬。然而,复杂性实际上比这个例子更极端,所以我想提出一些更有效的东西。我还在处理一些其他功能:
authLoginFacebook和authLoginTwitter。这个线程中的想法有很大帮助。谢谢!
标签: javascript function callback ecmascript-6