更有效地编写JQuery函数

时间:2015-08-20 20:22:19

标签: javascript jquery

我有一些工作正常的代码,但我觉得它可以写得更好。

$mainTabs.click(function() {
    $('video')[0].pause();
    $('video')[0].currentTime = 0;
});

我可以重写这个,所以它在一行而不是两行吗?我尝试了下面的代码,但得到了以下错误" Uncaught TypeError:无法设置属性' currentTime'未定义"。视频仍然暂停,但不会像它应该的那样倒带。我做错了什么,或者我的第一次尝试是否有效?我想我可以在一个变量中保存$(' video'),但是希望只需要一次使用那个选择器。

$mainTabs.click(function() {
    $('video')[0].pause().currentTime = 0;
});

2 个答案:

答案 0 :(得分:4)

只有设计为链接的方法才能以链式方式使用:方法本身返回“this”或合适的链式对象。

在这种情况下,pause()不是可链接的,也不会返回任何内容(效果是方法调用表达式导致未定义的值)。

要“更有效”地写它 - 主要是因为更少重复 - 考虑使用局部变量。

$mainTabs.click(function() {
    var video = $('video')[0];
    video.pause();
    video.currentTime = 0;
});

虽然有时局部变量可能由于避免重新评估表达式而导致“性能”差异,但在这种情况下,将没有实用性能差异,因为评估相对较快并且很少进行。在这种情况下,使用局部变量可以更加明确意图。

答案 1 :(得分:1)

由于currentTime()需要操作视频对象而pause()只更改视频对象的状态而不返回对象本身,您将收到所描述的错误。

仅使用两行或更多代码生成一行并不总是更有效。考虑一下其他开发人员的可读性。