Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.10.2009, 14:07
Аватар для maxval
Интересующийся
Отправить личное сообщение для maxval Посмотреть профиль Найти все сообщения от maxval
 
Регистрация: 01.10.2009
Сообщений: 15

Как осуществляется инициализация переменных
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
Ответить с цитированием
  #2 (permalink)  
Старый 06.10.2009, 00:52
Аватар для maxval
Интересующийся
Отправить личное сообщение для maxval Посмотреть профиль Найти все сообщения от maxval
 
Регистрация: 01.10.2009
Сообщений: 15

неужели никто не встречался с подобными траблами...?
Ответить с цитированием
  #3 (permalink)  
Старый 06.10.2009, 08:13
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

ваш пример самостоятельно отлично работает и правильно
оба алерта выводят 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, 06.10.2009 в 08:15.
Ответить с цитированием
  #4 (permalink)  
Старый 07.10.2009, 23:09
Аватар для maxval
Интересующийся
Отправить личное сообщение для maxval Посмотреть профиль Найти все сообщения от maxval
 
Регистрация: 01.10.2009
Сообщений: 15

хм. очень странное явление. я создал еще один класс с той же функциональностью, но другим именем (текущий остался без изменения). и оба класса стали работать нормально. потом удалил вновь созданный и искомый класс не стал давать сбоев.. очень странная ситуация... ну в общем, главное, что объективных изъянов в явоскриптовой модели ооп нет и это хорошо. тема исчерпала себя.
Gvozd все равно Спасибо
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как правильно послать XML в POST запросе LowCoder AJAX и COMET 10 15.07.2009 23:20
Как сделать электронный каталог продукции? natarius Серверные языки и технологии 6 24.05.2009 20:56
как найти нужный объект? `p r o x y jQuery 2 05.05.2009 01:12
Переменная от переменной или как к имени переменной конкатенировать значение другой Aderba jQuery 5 12.11.2008 15:25
форма как в ExtJS 2 magistr_bender Общие вопросы Javascript 0 11.09.2008 16:01