[英]JavaScript square bracket function call
当我遇到这一行时正在浏览 jQuery 源代码:
jQuery(this)[ state ? "show" : "hide" ]();
有什么优势吗
state ? jQuery(this).show() : jQuery(this).hide();
?
独立示例:
var object = {
foo: function() {
alert('foo');
},
bar: function() {
alert('bar');
}
};
object[true ? 'foo' : 'bar']();
object[false ? 'foo' : 'bar']();
性能上没有优势。 但是代码长度有优势(如果你认为这是一个优势),特别是如果你的函数中有很多参数,那么 DRY 原则(不要重复代码)。
考虑以下:
obj[ cond ? "foo" : "bar" ]("param1", "param2", "param3");
相对:
cond ? obj.foo("param1", "param2", "param3") : obj.bar("param1", "param2", "param3");
如您所见,您以第二种方式重复“很多”代码
希望这可以帮助。 干杯
在您的示例中,两者之间没有区别
jQuery(this)[ state ? "show" : "hide" ]();
和
state ? jQuery(this).show() : jQuery(this).hide();
但是,可以使用正方形来调用没有名称的 function:
var myFunctionName = 'show';
jQuery(this)[ myFunctionName ]();
为什么这很有用? 在上面的例子中,它完全没用。 但是我们可以找到一些可能很好的情况:
// list of available methods
var effects = [ 'hide', 'slideUp', 'fadeOut' ];
// get a random index between 0 and effects.length-1 (2 in this case)
var randomIndex = Math.floor(Math.random() * (effects.length));
// get the method name
var methodToCall = effects[ randomIndex ];
jQuery(this)[ methodToCall ]();
此代码段将选择一种随机方法并通过 jQuery object 调用该方法。 这不是很好吗? :)
有没有优势
不,除了稍微短一些的代码,并且不重复jQuery(this).
但是,可以通过首先声明$this
来减轻重复。
我发现这种模式不是特别容易阅读,所以我自己唯一使用它的时候是参数列表不重要,并且不依赖于正在调用的方法。
jQuery方式更加简洁,遵循DRY原则。 我认为这是第二个示例的主要优势。
按顺序,我排名:
我对jQuery(this)[ state? "show": "hide" ]();
jQuery(this)[ state? "show": "hide" ]();
是它不是很多人习惯看到和习惯阅读的常见设计模式。 因此,它的可读性不是很高,并且很容易使将来试图维护此代码的人感到困惑(导致错误)。 正如我上面的优先级所示,如果两者不一致,我更倾向于可读性而不是 DRY。
在这种情况下,我可能会写:
var $this = jQuery(this);
state ? $this.show(): $this.hide();
不是那么短,但在我看来更具可读性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.