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: 14 let
|
0