| Autor | Zpráva | ||
|---|---|---|---|
| Witiko Profil * |
#1 · Zasláno: 8. 11. 2009, 22:11:27
Mám mírný problém s vpravením elementu "this" do anonymní funkce. Přesněji řečeno jsem pracoval na třídě, která by měla na starosti zobrazování tooltipů, přičemž schématicky to vypadá nějak takhle:
function tooltip() {
// inicializace
}
tooltip.prototype.show = function() {
//zobrazí tooltip
}
tooltip.prototype.hide = function() {
//skryje prototype
}
ahoj=new tooltip();
tooltip.text="Ahoj Jakpsátweb fórum";
Hodně schématické, ale představu máte, což je v tomhle případě to zásadní. :D Problém je v tom, že jsem chtěl do hide() metody objektu tooltip vpravit i časovaný postupný fade(), však víte, aby to hezky vypadalo. :D Nicméně, tohle:
tooltip.prototype.hide() {
this.interval=window.setInterval(function(){
this.fade();
},100);
}
nefunguje. Script je opět ilustrativní, řekněme, že fade() při každém zavolání sníží opacity o 5% a při dosažení 0 zavolá clearInterval(this.interval). Debugger vyhazuje, že daný objekt (tím je myšlený this v anonymní funkci) metodu fade() nepodporuje pokusil jsem se do funkce vpravit this jako argument (function(this){}) , nicméně nefunguje, argument je po zavolání funkce přepsán stejnojmenou vlastností this. Neví někdo jak na to? Nechci se uchylovat k takovým děsům, jako je window(eval). |
||
| Chamurappi Profil |
#2 · Zasláno: 8. 11. 2009, 22:20:48
Reaguji na Witika:
tooltip.prototype.hide() {
var that = this;
this.interval=window.setInterval(function(){
that.fade();
},100);
} |
||
| Witiko Profil * |
#3 · Zasláno: 8. 11. 2009, 22:27:52
Pěkné, teď mi to došlo. Anonymní funkce dědí proměnné, ale this není proměnná, je unikátní pro každý objekt. Díky za postrčení. :)
|
||
| Aichi Profil |
#4 · Zasláno: 10. 11. 2009, 19:06:08
Ahoj, mozna by ti pomohlo tu anonymni funkci zbindovat, jak popisuji zde: Objektové programování s knihovnou jQuery. Ve zkratce bys udelal v konstrukcni metode volani:
this.fade = _bind(this, this.fade); bindovaci funkci:
_bind = function(obj,fnc){
return function() {
return fnc.apply(obj,arguments);
}
};
Pak nemusis delat uzaveru s that = this |
||
| Chamurappi Profil |
#5 · Zasláno: 10. 11. 2009, 19:13:34
Reaguji na Aichiho:
„Pak nemusis delat uzaveru s that = this“ Pokud metoda fade nějak vyhodnocuje přítomnost argumentu, tak musí. |
||
|
Časová prodleva: 17 let
|
|||
0