Помогите разобраться с классами
У меня есть класс (ниже упрощенный вариант)
function Folio() { this.root = root = jQuery('body'); this.folioWrap = root.find('.items'); this.overflow_ = root.find('.detail-window'); this.itemClick_ = function(evt){ this.loadWork(url,750); return false; } this.loadWork = function(path,delay){ this.overflow_.addClass("show"); setTimeout(function() { folio.overflow_inner.html(" ").load(path, function() { folio.loading_.hide(); folio.overflow_inner.addClass("show"); }); }, delay); } } var folio = new Folio(); Проблема в методе loadWork . не могу понять, почему в нем я не могу писать так: this.loadWork = function(path,delay){ this.overflow_.addClass("show"); setTimeout(function() { this.overflow_inner.html(" ").load(path, function() { this.loading_.hide(); this.overflow_inner.addClass("show"); }); }, delay); } Пока не смог понять в чем дело, но если написать вместо this.overflow_inner- folio.overflow_inner. То всё работает. Кто-нибудь подскажите, я только недавно начал писать что-то на js. нагуглить не смог ничего. setTimeout используется потому что нужно получить данные с задержкой. |
Функция, переданная в качестве аргумента в setTimeout будет вызывана в контексте window, а не твоего инстанса (folio).
Скорее всего ты просто не понимаешь как работает this в javascript. Почитай об этом. В ES5-совместимых браузерах контекст можно явно задать через .bind(context), в твоем случае это будет setTimeout( (function(){ ... }).bind(this), delay) Для старых браузеров либо подключать es5-shim.js либо оставить так, как у тебя, только объявлять folio внутри loadWork: var folio = this. |
Цитата:
|
Спасибо большое.
Я думал, что дело в контексте, но не знал как исправить это. Задержка нужна для визуализации. Во время работы скрипта идет анимация, и если ответ приходит слишком быстро, то анимация прерывается на самом, так сказать, интересном месте. |
Всё заработала - спасибо!
|
Часовой пояс GMT +3, время: 11:05. |