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);
/* ... */
}