jquery方法链中的点与括号表示法
假设我有一长串jquery方法,并希望根据一些布尔条件添加两个方法之一的额外调用(例如show
或hide
)。
有两种方法可以做到:
1) 点表示法 :将方法链存储在变量中,然后使用点表示法使用此变量调用额外的方法(由if...else
构造或三元运算符解析)。
代码 :
var $tmp = $el._long_()._method_()._chain_(); if (condition) $tmp.show(); else $tmp.hide();
2) 括号表示法 :使用方括号表示法附加方法的额外调用(由三元运算符解析)。
代码 :
$el._long_()._method_()._chain_()[condition? 'show' : 'hide']();
我曾经使用过第一个,特别是如果在其他地方使用$tmp
变量。 但第二种方式似乎更简洁,但不太可读。
这种情况的最佳选择是什么?
eslint更喜欢点符号 :
在JavaScript中,可以使用点表示法(foo.bar)或方括号表示法(foo [“bar”])访问属性。 但是,点符号通常是首选,因为它更容易阅读,更简洁,并且使用激进的JavaScript最小化器可以更好地工作。
IMO,将三级逻辑放在支架内是有点太可爱了,难以阅读。
这个问题可以归结为JavaScript,而不是jQuery特有的。
使用括号表示法的典型原因是:
- 要引用的函数/属性名称是可变的,在这种情况下,括号可以帮助您保持代码干燥
- 属性/函数名称包含字符,无法通过点表示法访问。
您在这里的使用似乎是第一种情况的新颖变体 – 您通过使用来自三元操作的变量字符串值来指定要执行的函数,从而避免重复代码。
这是显性可读性和DRY代码之间的权衡,因此“最佳”选择将是主观的。
对于某些人来说,三元并不难读。 you can read this ? "one of them" : "not one of them"
you can read this ? "one of them" : "not one of them"
。 你总是可以在任何特别长的function链附近发表评论,以帮助那些难以消化三元的人。