Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.07.2012, 21:45
Server
Отправить личное сообщение для Rootpassword Посмотреть профиль Найти все сообщения от Rootpassword
 
Регистрация: 26.09.2011
Сообщений: 252

this+callback
Если у нас есть чужая глобальная функция
method(a,b, callback);

method отрабатывает, вызывает функцию callback.
1) Мне вообще представлялось логичным, что this для вызова callback сохранится, если нет-это можно считать логической ошибкой?
2) нормальный фикс ситуации? ничего проще не придумывается.
var f=(function(){var temp=this; return (function(e){ callback.call(temp,e) }) }).call(this);
method(a,b,f);

Последний раз редактировалось Rootpassword, 17.07.2012 в 23:33.
Ответить с цитированием
  #2 (permalink)  
Старый 17.07.2012, 22:14
Профессор
Отправить личное сообщение для oneguy Посмотреть профиль Найти все сообщения от oneguy
 
Регистрация: 31.05.2012
Сообщений: 396

1) если функция вызывается обычным способом, не как метод, то this получает значение глобального объекта (или undefined в строгом режиме) - это правильное поведение согласно спецификации.
2) этот код можно сократить:
var f=callback.bind(this);
method(a, b, f);
Ответить с цитированием
  #3 (permalink)  
Старый 17.07.2012, 22:28
Server
Отправить личное сообщение для Rootpassword Посмотреть профиль Найти все сообщения от Rootpassword
 
Регистрация: 26.09.2011
Сообщений: 252

1) Я, естественно,вызываю method.apply(this) а не method, и не получаю нужного this у callback
2) Bind же в jQuery, если его нету, именно так и эмулируется.
Ответить с цитированием
  #4 (permalink)  
Старый 17.07.2012, 22:39
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от Rootpassword
Bind же в jQuery
причем тут джуквери? bind это нативный метод, отсутсвовать он может только в старых браузерах.

https://developer.mozilla.org/en/Jav.../Function/bind
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #5 (permalink)  
Старый 17.07.2012, 22:41
Server
Отправить личное сообщение для Rootpassword Посмотреть профиль Найти все сообщения от Rootpassword
 
Регистрация: 26.09.2011
Сообщений: 252

Точнее в IE<9 он отсутствует, для которых в jQuery и не поленились написать фикс.
Ответить с цитированием
  #6 (permalink)  
Старый 17.07.2012, 22:42
Профессор
Отправить личное сообщение для oneguy Посмотреть профиль Найти все сообщения от oneguy
 
Регистрация: 31.05.2012
Сообщений: 396

1) если вы вызываете method.apply(this), то функция method получает this, а если ещё внутри method вызывается 2-ой аргумент, то этой функции автоматически не передаётся это значение в качестве this, его нужно отдельно привязать с помощью callback.bind(this).
Ответить с цитированием
  #7 (permalink)  
Старый 17.07.2012, 22:46
Server
Отправить личное сообщение для Rootpassword Посмотреть профиль Найти все сообщения от Rootpassword
 
Регистрация: 26.09.2011
Сообщений: 252

Сообщение от oneguy Посмотреть сообщение
1) если вы вызываете method.apply(this), то функция method получает this, а если ещё внутри method вызывается 2-ой аргумент, то этой функции автоматически не передаётся это значение в качестве this, его нужно отдельно привязать с помощью callback.bind(this) или callback.apply(this).
Ну естественно. Но функция-то чужая, т.е. фиксить ее нельзя. Вопрос-то был в том, является ли не-прокидывание this в коллбек ошибкой, и как это исправить не через редактирование method
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить значение переменной из callback функции? Хиросим AJAX и COMET 5 24.04.2012 09:32
Ajax и Json callback функция borabora Prototype & script.aculo.us 0 30.01.2012 15:01
Как вернуть результат callback? yura_remnev jQuery 2 01.07.2011 16:51
jScrollPane scrollTo, как повесить callback функцию на окончание прокрутки? com-meta jQuery 5 10.06.2010 23:14
Mootools fade callback или chain Alexander Majesty Библиотеки/Тулкиты/Фреймворки 3 08.04.2010 15:58