Ваш код:
fn(currSlide.show());
... звонкиcurrSlide.show()
и передает возвращаемое значение от вызова его в fn
, точно так, как foo(bar())
звонкиbar
и передает ее возвращаемое значение в foo
.
поскольку возвращаемое значение show
не является функцией, вы получаете сообщение об ошибке. Вы можете иметь в виду:
fn(function() { currSlide.show(); });
Заметим, однако, что у вас есть проблема здесь:
var fn = currSlide ? currSlide.hide : callIt;
currSlide
Если это truthy, вы получите ссылку на функцию hide
, но эта функция не никак не связана с currSlide
. Если вы позвоните позже, это, скорее всего, потерпит неудачу, потому что ожидается, что будет означать что-то конкретное.
Если вы можете рассчитывать на имеющие признаки из ECMAScript5 (так, что вы используете современный браузер, кроме IE8 и/или вы, включающий в себя «ES5 прокладку», вы можете исправить это с Function#bind
:
var fn = currSlide ? currSlide.hide.bind(currSlide) : callIt;
Или, если вы используете JQuery, вы можете исправить это с JQuery-х $.proxy
:
var fn = currSlide ? $.proxy(currSlide.hide, currSlide) : callIt;
Оба эти возвращают новую функцию, которая при вызове будет вызывать целевую функцию с заданным this
значением.
Если вы не используете ES5 или JQuery, ну, это будет сделать это:
var prevSlide = currSlide;
var fn = prevSlide ? function(func) { prevSlide.hide(func); } : callIt;
... но в тот момент я подозреваю, отступая назад и пересматривают может быть в порядке.
и что вы переходите в 'callIt' в качестве параметра? –
функция. 'callIt' должен служить функцией tmp для замены функции анимации jquery. Например: '(currentSlide? CurrentSlide.hide: callIt) (nextSlide.fadeIn)' –
@MarkusOrreilly: Показать вызов 'callIt', вот где ошибка. –