Могу ли я передать «это» в качестве параметра другой функции в JavaScript - PullRequest
6 голосов
/ 22 марта 2012

У меня есть это:

$('#slider li').click(function () {
    var stepClicked = $(this).index();
    alert(stepClicked);
    if (stepClicked != 0) {
        $('#cs_previous').removeClass('cs_hideMe');
    } else {
        $('#cs_previous').addClass('cs_hideMe');
    }

    $('li.cs_current').removeClass('cs_current');
    $($(this)).addClass('cs_current');


    moveToNextImage(stepClicked);

    function moveToNextImage(stepClicked) {
        alert(stepClicked);
        var currentIs = $('li.cs_current').index();
        var newLeftEdge = currentIs - stepClicked;
        $('.cs_riskStageImage').fadeTo(200, .2).animate({
            left: newLeftEdge
        }, "fast").fadeTo(200, 1);
    };
});

предупреждение показывает правильный индекс для нажатой кнопки, и когда я оповещаю переменную в последней вызываемой функции, moveToNextImage(stepClicked), отображается то же значение, но анимация не происходит. Это работает многими другими способами, но я пытаюсь передать значение индекса элемента списка, по которому щелкнули мышью, для вычисления по математике.

.. или я могу преобразовать значение в другую переменную в первой функции, которую я могу передать второй?

Ответы [ 2 ]

4 голосов
/ 22 марта 2012

Функции javascript call() и apply() предназначены именно для того, чтобы вызывать функцию в контексте.

function sum() { 
    return this.num1 + this.num2; 
} 

function callSum(num1, num2) { 
    this.num1 = num1
    this.num2 = num2
    return sum.call(this);       //call sum() in the context of this 
} 

alert(callSum(10, 15)); 

function applySum(num1, num2) { 
    this.num1 = num1
    this.num2 = num2
    return sum.apply(this);   //call sum() in the context of this 
} 

alert(applySum(30, 45)); 

jsfiddle Пример ссылки

Теперь в функции sum() ключевое слово this имеет тот же контекст, что и в функциях callSum() и applySum().

Разница между call() и apply() заключается в том, чтоВторой параметр apply - это либо массив параметров для передачи, либо объект arguments.

3 голосов
/ 22 марта 2012

Вы можете передать это другой функции, например

moveToNextImage(this, stepClicked);

function moveToNextImage(obj, stepClicked) {
    var index = $(obj).index;
}

В вашем коде, что означает эта строка

...