Diskuze: klíčové slovo this
Zobrazeno 2 zpráv z 2.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
this
, nebo kontext funkce, je v JavaScriptu hodně proměnlivý
parametr. Každá funkce má nějaký kontext a ten se může
měnit v závislosti na objektu, na němž se vykonává. Zavolat funkci s
jiným kontextem lze pomocí metod Function.apply
,
Function.call
; změnit kontext funkce umí metoda
Function.bind
, která v podstatě obalí funkci něčím
takovým:
function() {
return fce.apply(kontext, arguments);
};
Uložit si referenci na objekt do nové proměnné je taky možné. V CoffeeScriptu na to existuje dokonce zkrácený zápis. Např.:
// CoffeeScript
promise.then (data) => @scope.$broadcast 'service:data', data
// se přeloží do JavaScriptu asi takhle:
promise.then((function(_this) {
return function() {
_this.scope.$broadcast('service:data', data);
};
})(this));
EDIT: Abych odpověděl na otázku, v zásadě bys s kontextem funkcí neměl mít problémy, pokud ho nějak často dynamicky neměníš. Jsou případy, kdy je to vhodné nebo dokonce nutné, ale v některých situacích je lepší to nedělat, případně si uložit ten objekt do lokální proměnné a odkazovat na něj přes tuhle proměnnou jako je to v příkladu výše.
Zobrazeno 2 zpráv z 2.