Как осуществляется инициализация переменных
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, время: 23:20. |