2014-04-06 2 views
0

я получаю test is not defined при вызове методаПопытка вызвать метод внутри функции

http://jsfiddle.net/n4mKw/1766/

<span id="rotator"></span> 

var rotate = { 
    quoteIndex: -1, 
    duration: 500, 
    delay: 3000, 
    play: true, 
    quotes: [], 
    init: function (quotes) { 
     this.quotes = quotes; 
     this.showNextQuote(); 
    }, 
    showNextQuote: function() { 
     this.quoteIndex = (this.quoteIndex + 1) % this.quotes.length; 
     if (this.play) { 
      $("#rotator").html(this.quotes[this.quoteIndex]) 
       .fadeIn(this.duration) 
       .delay(this.delay) 
      .fadeOut(this.duration, this.showNextQuote.bind(this)); 
     } 
    }, 
    stop: function() { 
     this.play = false; 
    } 



}; 

var test = rotate.init(["example1", "example2", "example3"]); 
test.stop(); 
+3

'rotate.init' ничего не возвращает, поэтому' test' 'undefined' – zerkms

ответ

1

Ваши функции не возвращают экземпляр объекта вращения, как указано в предыдущем ответе. Однако способ, которым вы можете исправить это, - вернуть экземпляр объекта в тестовую переменную.

var rotate = { 
    quoteIndex: -1, 
    duration: 500, 
    delay: 3000, 
    play: true, 
    quotes: [], 
    init: function (quotes) { 
     this.quotes = quotes; 
     this.showNextQuote(); 
     return this; 
    }, 
    showNextQuote: function() { 
     this.quoteIndex = (this.quoteIndex + 1) % this.quotes.length; 
     if (this.play) { 
      $("#rotator").html(this.quotes[this.quoteIndex]) 
       .fadeIn(this.duration) 
       .delay(this.delay) 
      .fadeOut(this.duration, this.showNextQuote.bind(this)); 
     } 
     return this; 
    }, 
    stop: function() { 
     this.play = false; 
     return this; 
    } 



}; 

var test = rotate.init(["example1", "example2", "example3"]); 
test.stop(); 

Я обновил код, чтобы вернуть объект в функцию. Пожалуйста, проверьте его на скрипке.

1

остановка() Вы можете захотеть rotate.stop() вместо этого. test не является экземпляром rotate, потому что init не возвращает объект или что-то в этом роде.

1

Каждая функция JavaScript возвращает что-то, если вы не указали возвращаемое значение, оно по умолчанию будет возвращено undefined. То, что вы делаете в настоящее время, назначает это неопределенное значение для проверки и вызова stop(), которое является недопустимым. Если вы пытаетесь связать объекты, просто верните это из функции init.

var rotate = { 
    quoteIndex: -1, 
    duration: 500, 
    delay: 3000, 
    play: true, 
    quotes: [], 
    init:function() 
    { 
    this.quotes = quotes; 
    this.showNextQuote(); 
    return this; 
    }, 
    showNextQuote: function() { 
    //showNextQuote stuff..... 
    }, 
    stop:function(){ 
    this.play = false; 
    } 

}

Будьте осторожны, как вы используете «это» ключевое слово though..it будет означать что-то еще в другом контексте.

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