2015-08-20 5 views
0

У меня есть код, который работает отлично, но я чувствую, что он может быть написан лучше.Написание функции JQuery более эффективно

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

Можно ли переписать это так, чтобы оно было на одной линии вместо двух? Я пробовал код ниже, но получил следующую ошибку: «Uncaught TypeError: Невозможно установить свойство currentTime« неопределенного ». Видео все еще приостанавливается, но не перематывается так, как должно. Я что-то делаю неправильно, или моя первая попытка такая же эффективная, как и она? Я полагаю, что я мог бы сэкономить $ ('video') в переменной, но надеялся использовать этот селектор только в любом случае.

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

потому что 'pause()' не возвращает ссылку на элемент видео –

ответ

4

Только методы, которые разработаны, чтобы быть приковано могут быть использованы в прикованном моды: это сам метод возвращение «этот» или подходящий прикован объект.

В этом случае pause() не предназначен для цепочки и не возвращает ничего (эффект заключается в том, что выражение вызова метода приводит к неопределенному значению).

Чтобы написать это «более эффективно» - в основном, как и менее, повторить - рассмотрите возможность использования локальной переменной.

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

В то время как бывают случаи, когда локальная переменная может сделать «производительность» разницу за счет избежать переоценки выражений, в этом случае не будет никакой практической разницы производительности как оценка относительно быстро и очень редко. Использование локальной переменной делает гораздо больше для ясности намерения в таких случаях.

+0

не строго верно, вы только вызываете функцию '' 'один раз в своем примере, а не дважды, как в OP, поэтому ваш код будет более эффективным. –

+1

* No * выгода * выгода *. Разница «каждый клик» не имеет значения. Хотя очень возможно построить случаи, когда это важно, 97/3. Я настоятельно рекомендую использовать локальные переменные для ясности намерения. – user2864740

+1

Хорошо, не «строго». – user2864740

1

Как currentTime() требуется объект видео для работы, и pause() просто изменяет состояние видеообъекта, не возвращая сам объект, вы получите описанную вами ошибку.

Не всегда более эффективно делать только одну строку из кода, которая может быть двух или более. Подумайте, насколько это читаемо для других разработчиков.

+1

> Рассмотрите, насколько читабельны другие разработчики. ДА. Это более важно, чем сохранение строки исходного кода. –

+0

Согласитесь с Адамом и Тони о важности удобочитаемости, но я считаю эту цепочку вызовов одним слоем более удобочитаемой. Однако ... (1), что является _completely_ в стороне от того, является ли он более эффективным, и (2) не может сделать это здесь по причине в ответе user2864740 в любом случае. –

Смежные вопросы