Как осуществляется инициализация переменных
var Counter = function(min,sec,interval,elem){
this.elem = elem;
this.countVal = Math.round(min*60) + Math.round(sec);
this.interval = interval;
this.isStarted = false;
this.isPaused = false;
}
Counter.prototype.timer = null;
Counter.prototype.start = function() {
//если таймер не стартовал
if (!this.isStarted){
var that = this;
this.isStarted = true;
this.timer = setTimeout(function() { that.printCounter();},this.interval);
}
else{
return true;
}
}
counter = new Counter(2,5,500,time); после выхода из конструктора объект имеет следующие свойства и методы countVal 125 elem div#time.timerStarted interval 500 isPaused false isStarted true ?? timer 2 ?? printCounter function() resume function() start function() stop function() свойства объекта timer не null isStarted не false я попробовал убрать из Counter.prototype.start this.isStarted = true; и тогда свойство isStarted осталось false вопрос такой. насколько я понял Свойство prototype Значением свойства prototype является ссылка на прототип данного объекта. Прототип используется для динамического добавления или удаления свойств и методов класса объектов. но почему же при конструировании объекта конструктор проходит по веткам методов и устанавливает встретившиеся свойства? как тогда избежать такой ситуации? при изучении объектной модели руководствовался http://karaboz.ru/?p=6 http://www.arininav.ru/js/js07.htm#ref3715 |
неужели никто не встречался с подобными траблами...?
|
ваш пример самостоятельно отлично работает и правильно
оба алерта выводят false видимо ошибку в другом месте, которые вы не разместили тут копайте дальше. судя по всему каким-то боком у вас вызывается явно метод start() при конструировании оьъекта
var Counter = function(min,sec,interval,elem){
this.elem = elem;
this.countVal = Math.round(min*60) + Math.round(sec);
this.interval = interval;
this.isStarted = false;
this.isPaused = false;
}
Counter.prototype.timer = null;
Counter.prototype.start = function() {
//если таймер не стартовал
if (!this.isStarted){
var that = this;
this.isStarted = true;
this.timer = setTimeout(function() { that.printCounter();},this.interval);
}
else{
return true;
}
}
counter = new Counter(2,5,500,document.body);
alert('time is null: '+(counter.time===null));
alert('isStarted: '+counter.isStarted);
|
хм. очень странное явление. я создал еще один класс с той же функциональностью, но другим именем (текущий остался без изменения). и оба класса стали работать нормально. потом удалил вновь созданный и искомый класс не стал давать сбоев.. очень странная ситуация... ну в общем, главное, что объективных изъянов в явоскриптовой модели ооп нет и это хорошо. тема исчерпала себя.
Gvozd все равно Спасибо |
| Часовой пояс GMT +3, время: 06:19. |