Autor Zpráva
Witiko
Profil *
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
Reaguji na Witika:
tooltip.prototype.hide() {
  var that = this;
  this.interval=window.setInterval(function(){
    that.fade();
  },100);
}
Witiko
Profil *
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
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
Reaguji na Aichiho:
Pak nemusis delat uzaveru s that = this
Pokud metoda fade nějak vyhodnocuje přítomnost argumentu, tak musí.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0