0

Есть конструктор объекта:

function ServisePlate(plate) {
    this.elem = plate;
    this.header = plate.querySelector('.servises_content_header');
    this.body = plate.querySelector('.servises_content_text');
    this.settings = {
        step: 30,
        speed: 10
    }
    var self = this;

}

И метод:

ServisePlate.prototype.showBody = function() {
    console.log(this.elem.offsetHeight);
    console.log(this.body.offsetHeight);
    if(this.elem.offsetHeight < this.body.offsetHeight + 100) {
        this.elem.style.height = this.elem.offsetHeight + this.settings.step + 'px';
        setTimeout(self.showBody, this.settings.speed);
    }
}  

при создании объектов и запуске функции

var box = document.querySelector('.servises');

var plates = [].slice.apply(box.querySelectorAll('.servises_content'));
for(var i = 0; i < plates.length; i++) {
   plates[i] = new ServisePlate (plates[i]);
   plates[i].showBody();
}

Не отрабатывает тайм аут... т.е строчка:

this.elem.style.height = this.elem.offsetHeight + this.settings.step + 'px';

выполняется и на этом все!!! При этом в консоль ошибки не падают. Подскажите где ошибка?

pepel_xD
  • 1,087
  • Без вглядывания в код предрекаю что надо что-то вроде: setTimeout(this.showBody.bind(this), this.settings.speed); – Утка Учится Укрываться Sep 16 '16 at 11:01
  • 1
    Возможно вам поможет вот это: http://ru.stackoverflow.com/questions/535030/%D0%9F%D0%BE%D1%82%D0%B5%D1%80%D1%8F-%D0%BA%D0%BE%D0%BD%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%B0-%D0%B2%D1%8B%D0%B7%D0%BE%D0%B2%D0%B0 Или вот это: http://ru.stackoverflow.com/questions/566696/%D0%B2-nodejs-%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D1%8B-%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D1%8F%D1%82%D1%81%D1%8F-undefined-typescript#comment741361_566696 – Утка Учится Укрываться Sep 16 '16 at 11:02
  • Ну и добавлю, что self из конструктора вам не будет просто так виден в методе, но подозреваю что он туда попал уже в процессе лихорадочной отладки – Утка Учится Укрываться Sep 16 '16 at 11:08
  • UPD: во второй ссылке сослался на коммент ане на вопрос: http://ru.stackoverflow.com/questions/566696/%D0%B2-nodejs-%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D1%8B-%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D1%8F%D1%82%D1%81%D1%8F-undefined-typescript – Утка Учится Укрываться Sep 16 '16 at 11:10
  • @Утка, контексты мне пока трудновато даются.... подскажите пожалуйста еще такой момент: Я собираюсь повесить обработчик на клик на контейнер затем проверять куда кликнули и запускать этот метод если клик был на объекте.... так вот в обработчике события this потеряет контекст... как мне правильней сослаться на объект? – pepel_xD Sep 16 '16 at 11:21
  • Не понял. Возможно вам стоит задать отдельный вопрос с иллюстрирующим примером. – Утка Учится Укрываться Sep 16 '16 at 11:26
  • "this потеряет контекст" - this, это и есть контекст =) Потерять контекст может метод (то есть значение this). Можно создать метод-обертку черзе bind с привязанным контекстом, тогда он не потеряется – Утка Учится Укрываться Sep 16 '16 at 11:28
  • Внимательно прочитайте вот это: http://learn.javascript.ru/bind – Утка Учится Укрываться Sep 16 '16 at 11:28

0 Answers0