Autor Zpráva
joe
Profil
Zdravím,

prosím o radu, jak "zprovoznit" následující kód tak, abych mohl nějakým způsobem zavolat zvýrazněnou část. Nevím, jak se mám k té funkci c() dostat, díky. Jedná se jen o zjednodušení problému.

var A = {
	x: 10
};


A.B = function(p1) {
	
	this.element = document.createElement('div');
	this.element.style.cssText='background:red;height:20px;width:100%';
	
	this.p1 = p1 + 'a';

	this.c = function() { // tuto funkci potřebuju volat
		alert(this.p1);
	}

	this.element.onclick = function() {
		this.c(); // právě tady :-)
	}
	
	document.body.appendChild(this.element);
	
};



var b = new A.B(10);
joe
Profil
Asi jediným řešením bude si přiřadit this do nějaké proměnné, jako uvádí Witiko tady.
Witiko
Profil
joe:
Jedná se o jiný druh problému, než jsem řešil, nicméně ano. Klíčové slovo this ve funkcích odkazuje na kontext pod nímž jsou spouštěny (a u event posluchačů na daný element, jak řeším ve výše zmíněném tématu), případně objekt window, pakliže jsou spouštěny v globálním kontextu. Je tedy třeba si uložit kýženou referenci do proměnné:
A.B = function(p1) {
    var that = this;
    this.element = document.createElement('div');
    this.element.style.cssText='background:red;height:20px;width:100%';
    
    this.p1 = p1 + 'a';

    this.c = function() { // tuto funkci potřebuju volat
        alert(this.p1);
    }

    this.element.onclick = function() {
        that.c(); // právě tady :-)
        // this není možné použít, poněvadž odkazuje na that.element, ne na that
    }
    
    document.body.appendChild(this.element);
    
};
joe
Profil
Witiko:
Ok, díky, už jsem to tak udělal. Jen myslím, že je pak lepší psát všude, konkrétně v tom, co jsi poslal už jen that místo this, ne? Pak v tom není takový binec - samozřejmě jen tam, kde se chci dostat k tomu původnímu objektu.
Witiko
Profil
joe:
To je na tobě, osobně odkazuji na privátní proměnnou jen, když to jinak nejde.
Chamurappi
Profil
Reaguji na joa:
Nebo si můžeš udělat funkci, která vrátí volání funkce s vyměněným this (s použitím metody apply). Ale that = this je asi pohodlnější a srozumitelnější.
joe
Profil
Chamurappi:
Tak to nevím jak to myslíš, ale spíš se mi líbí víc ta metoda that = this, i když teda používám _this = this :-)

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