Проблема с литералом объекта - возврат закрытия - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть модуль с разными методами. Один из методов вызывает другой метод в setTimeout, и мне нужно передать некоторые значения второму методу, который называется

Сначала я сделал это

transitSlide: function() {
        var left = parseInt(this.$ul.first().css('left')),
        newLeft = parseInt(left) + 100 ,
        index = (newLeft / 100),
        bool = (newLeft <= (this.slideShow.length - 1) * 100); // this is always TRUE

        this.$a.removeClass();
        this.$ul.addClass('fade');

        setTimeout(this.changeSlide.bind(this), 400);


        return bool; // I need to pass newLeft variable too !!!
}

changeSlide() {
    if (this.transitSlide) {
        alert('true') // this works!
    } else {
        alert('false')
    }
}

но мне нужно передать больше значений, чем я сделал это

transitSlide: function() {
        var left = parseInt(this.$ul.first().css('left')),
        newLeft = parseInt(left) + 100 ,
        index = (newLeft / 100);

        this.$a.removeClass();
        this.$ul.addClass('fade');

        setTimeout(this.changeSlide.bind(this), 400);

        return  {
        direction: (newLeft <= (this.slideShow.length - 1) * 100) ? true : false, // this is always TRUE
        // direction: true // also doesnt work !!!
        newLeft: newLeft
        }
}

changeSlide() {
    if (this.transitSlide.direction) {
        alert('true')
    } else {
        alert('false') // this doesnt work!
    }
}

, но он не возвращает true для второго метода, даже когда я просто подставляю значение true, тогда я обнаружил, что должен () вызвать его тогда янаписал

transitSlide: function() {
        var left = parseInt(this.$ul.first().css('left')),
        newLeft = parseInt(left) + 100 ,
        index = (newLeft / 100);

        this.$a.removeClass();
        this.$ul.addClass('fade');

        setTimeout(this.changeSlide.bind(this), 400);

        return  {
        direction: (newLeft <= (this.slideShow.length - 1) * 100) ? true : false, // this is always TRUE
        newLeft: newLeft
        }
}

changeSlide() {
        if (this.transitSlide().direction) {
                alert('true') // this works! but setTimeout call it over and over !!!
        } else {
                alert('false')
        }
}

но setTimeout заставляет его работать снова и снова (бесконечный цикл)

что я могу сделать в этой ситуации?Как я могу передать эти значения и получить к ним доступ во второй функции, не вызывая ее

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

с использованием метода apply() для передачи обоих параметров и this ключевое слово

transitSlide: function() {
    var left = parseInt(this.$ul.first().css('left')),
        newLeft = parseInt(left) + 100 ,
        index = (newLeft / 100),
        direction = (newLeft <= (this.slideShow.length - 1) * 100);


    this.$a.removeClass();
    this.$ul.addClass('fade');

    setTimeout(this.changeSlide.apply(this, [direction, newLeft]), 400);

},

changeSlide(direction, newLeft) {
    if (direction) {
        alert(true)
    } else {
        alert(false)
    }
},
0 голосов
/ 04 декабря 2018

Возвращаемые значения функции нигде не хранятся;они просто возвращаются вызывающей стороне.

Звучит так, как будто вы действительно хотите передать это состояние второй функции в качестве параметра, когда вы вызываете ее, используя setTimeout():

setTimeout(() => otherFunction(parameters))
...