jquery方法链中的点与括号表示法

假设我有一长串jquery方法,并希望根据一些布尔条件添加两个方法之一的额外调用(例如showhide )。

有两种方法可以做到:

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特有的。

使用括号表示法的典型原因是:

  1. 要引用的函数/属性名称是可变的,在这种情况下,括号可以帮助您保持代码干燥
  2. 属性/函数名称包含字符,无法通过点表示法访问。

您在这里的使用似乎是第一种情况的新颖变体 – 您通过使用来自三元操作的变量字符串值来指定要执行的函数,从而避免重复代码。

这是显性可读性和DRY代码之间的权衡,因此“最佳”选择将是主观的。

对于某些人来说,三元并不难读。 you can read this ? "one of them" : "not one of them" you can read this ? "one of them" : "not one of them" 。 你总是可以在任何特别长的function链附近发表评论,以帮助那些难以消化三元的人。