Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.10.2015, 16:58
Новичок на форуме
Отправить личное сообщение для menscool Посмотреть профиль Найти все сообщения от menscool
 
Регистрация: 11.07.2014
Сообщений: 3

Почему не работает this в setInterval?
Всем привет!
Выполняю задачу из урока, нужно было переписать класс "часы", используя прототипное наследование:

function Clock(options) {

    'use strict';

    this._template = options.template;

    this._timer;

}

Clock.prototype._render = function() {
    var date = new Date();

    var hours = date.getHours();
    if (hours < 10) hours = '0' + hours;

    var min = date.getMinutes();
    if (min < 10) min = '0' + min;

    var sec = date.getSeconds();
    if (sec < 10) sec = '0' + sec;

    var output = this._template.replace('h', hours).replace('m', min).replace('s', sec);

    console.log(output);
};

Clock.prototype.stop = function() {
    clearInterval(this._timer);
};

Clock.prototype.start = function() {
    this._render();
    var self = this;
    this._timer = setInterval(this._render, 1000);
};

var clock = new Clock({template : 'h : m : s'});
clock.start();


При запуске часов
var clock = new Clock({template : 'h : m : s'});
clock.start(); - они отрабатывают один раз, а далее - ошибка - Cannot read property 'replace' of undefined.
Если же заменить this.render в setInterval на self.render и обернуть в анонимную функцию - часы работают бесконечно, а не только один раз

Почему же так происходит? Почему this верен только при первом срабатывании функции? Запутался
Ответить с цитированием
  #2 (permalink)  
Старый 07.10.2015, 06:46
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

Сообщение от menscool
this._timer = setInterval(this._render, 1000);
this._timer = setInterval(this._render.bind(this), 1000);
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В Mozilla работает а в Opera нет почему? alex2012 Общие вопросы Javascript 2 03.08.2013 22:43
Почему не работает такой обработчик? Sirius-jack Общие вопросы Javascript 6 04.05.2013 17:26
Не пойму почему не работает код? Mukhtar Events/DOM/Window 4 29.04.2013 00:01
Почему не работает из PHP? Pumych Элементы интерфейса 6 12.02.2011 13:51
Почему не работает функция? Vitaly jQuery 10 31.07.2009 17:01