Цикл, подсчет и метод setInterval - PullRequest
1 голос
/ 03 февраля 2010

1) Будет ли работать эта методика построения? Или он должен иметь this.start ()?

2) Будет ли индекс сбрасываться в любой момент?

var imageRotate = new tRotate();
window.tRotate = function(){
__construct();

this.images = new Array();
this.index = 0;



this.__construct = function(){
  tRotate.start();
  // Do other things
}
this.start = function(){
    // yadadaa
    this.interval = setInterval("this.next()",500);
}
this.pause = function(){
    clearInterval(this.interval);
}
this.last = function(){
    --index;
}
this.next = function(){
    ++index;
}
}

1 Ответ

1 голос
/ 03 февраля 2010

1) Функциональные выражения оцениваются по порядку, как и любые другие выражения. Таким образом, ваш звонок на __construct() и new tRotate() не удастся. Либо позвоните в конце:

tRotate = function () {
    this.__construct = function () {/* ... */}
    /* ... */


    this.__construct();
}
imageRotate = new tRotate();

или используйте объявления функций вместо выражений:

imageRotate = new tRotate();
function tRotate () {
    __construct();

   function __construct() {/* ... */}

   /* ... */
}

2) index можно сбросить, если вы сбросите его вручную:

imageRotate.index = 0;

до тех пор, пока вы не коснетесь его, он не будет сброшен.

обновление : Я только что понял, еще несколько вещей, чтобы прокомментировать:

1) В javascript index не относится к this.index. Поэтому вам нужно изменить свои методы на:

this.next = function () {
    this.index ++;
}

2) В javascript, this не обязательно относится к объекту, к которому относится метод. В частности, для функций, выполняемых setInterval, this относится к объекту window. Таким образом, вам нужно захватить this в закрытии. Есть несколько способов сделать это:

function tRotate () {
    var self = this; // self refers to the correct 'this'

    this.start = function () {
        self.interval = setInterval(self.next,500);
             /* note: you need to pass a reference here, a string
              *       won't work because in the context of the
              *       window object the variable self is undefined
              */
    }

    /* ... */
}

или

function tRotate () {
    function makeStartMethod (self) {
        self.interval = setInterval(self.next,500);
    }
    this.start = makeStartMethod(this);

    /* ... */
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...