Autor | Zpráva | ||
---|---|---|---|
joe Profil |
#1 · Zasláno: 26. 2. 2011, 21:25:56 · Upravil/a: joe
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 |
#2 · Zasláno: 26. 2. 2011, 22:19:28
Asi jediným řešením bude si přiřadit this do nějaké proměnné, jako uvádí Witiko tady.
|
||
Witiko Profil |
#3 · Zasláno: 27. 2. 2011, 13:46:51 · Upravil/a: Witiko
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 |
#4 · Zasláno: 27. 2. 2011, 16:30:33
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 |
#5 · Zasláno: 27. 2. 2011, 17:11:29 · Upravil/a: Witiko
joe:
To je na tobě, osobně odkazuji na privátní proměnnou jen, když to jinak nejde. |
||
Chamurappi Profil |
#6 · Zasláno: 27. 2. 2011, 17:44:29
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ší.
|
||
Časová prodleva: 5 dní
|
|||
joe Profil |
#7 · Zasláno: 5. 3. 2011, 04:25:48
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 :-) |
||
Časová prodleva: 13 let
|
0