Подсмотрел интересный прием в ExtJs 
Программируя на JavaScript я очень часто использую замыкания (а кто их не использует?). Штука, безусловно, очень удобная и полезная. Правда есть несколько неудобных моментов, например, в теле функции для которой создается замыкание (внутренняя функция) нельзя использовать указатель this. Точнее использовать его можно, но указывает он на контекст внутренней функции, а очень часто хочется обратится к контексту внешней (функции). Обычно, я из таких ситуаций выхожу следующим образом.
someFunction: function() {
this.title = "Город-герой Москва";
// … тут какой-то код
var that = this; //
function innerFunction() {
that.title = "Город герой Санкт-Петербург";
}
alert(this.title);
}
Казалось бы ничего криминального здесь нет, чтобы получить во внутренней функции указатель this, вводим дополнительную переменную “that” и благополучно используем ее в функции. Но есть одно “но”, иногда this.title и that.title воспринимаются как две разные переменные и в результате появляются ошибки.
Работая с фреймворком ExtJS, я обратил внимание, что часто в исходниках ExtJS вместо указателя this используется переменная “me“, которая является указателем на this . Т.е. фактически this используется только один раз - при определении переменной me, а потом (в пределах функции) уже не используется.
Думаю что, по задумке разработчиков это решение используется с целью экономии, ведь me на целых два байта короче чем this. Но кроме экономии есть еще один плюс, который возникает при работе с замыканиями - независимо от того где пишется код во внешней или внутренней функции у программиста переменная “me” четко ассоциируется с внешней функцией и шансов сделать ошибку (как в случае с this и that) становится меньше.
Вот как это выглядит в ExtJS:
var me = this,
dom = dom || me.dom;
try{
if(Number(defer)){
me.focus.defer(defer, null, [null, dom]);
}else{
dom.focus();
}
}catch(e){}
return me;
}
Мне интересно, что скажет общественность, по этому поводу. Возможно мои умозаключения - не более чем бред кодо-параноика, который видит смысл там где его нет :-)?
подписаться на блог
Leave a Reply