
Javascript - Nefunkční this uvnitř funkce
Ahoj, nemůžu zavolat metodu this.test(); uvnitř funkce v metodě show(). Neví někdo proč?
class Foo{
test(){
return 'bar';
}
show(){
setTimeout ( function (){
return this.test();
},100);
}
}
var foo = new Foo();
var a = foo.show();
console.log(a);
Zkus tohle:
Díky, a má tam být
var self = this.
nebo
var self = this;
s tím středníkem na konci to funguje, ale proč nefunguje přímo this?
Se středníkem.
Nefunguje to, protože this uvnitř funkce se vztahuje na tu funkci.
Díky, this které patří funkci? this se přeci používá jen ve třídách, ne?
Ano, ale v setTimeout mas (bezejmennou) funkci, ktera zadne tride nepatri (neni jeji metodou) a tak zadne this pri svem volani nedostava. this neni skutecna prommena, neni nikde deklarovana, nikde se ji neprirazuje hodnota - je to jen jazykova konstrukce. Tim, ze te funkci das skutecnou promennou s prirazenou hodnotou tohle obejdes :)
this se v JS používal dávno před tím, než zavedli třídy (rok 2015).
Jo, patří tam středník, blbě jsem to napsal.
Přímo to nefunguje kvůli rozdílnýmu scope.
Ještě by ti mohlo fungovat tohle:
Díky ale PURE JS tuto funkci nezná :(
bind(this);
Ale zná. Je je to potřeba napsat na správný místo.
Díky.
Ta funkce stejně funguje nějak jinak než bych chtěl, pokud zadám
jako by ta funkce nečekala až se provede, jde to nějak nastavit? Až se provede celý kód uvnitř setTimeout() tak pokračuj? Díky
Ale funguje to tak, jak to fungovat má. Pomocí setTimeout() nastavíš, za jaký čas se má funkce vykonat a program pokračuje dál. Hledáš asi něco jako delay(), ale to v JS nenajdeš.
Zpoždění můžeš simulovat velkou smyčkou, prázdnej for cyklus, ale ani náhodou neodhadneš kolik průchodů je potřeba na 1 s. Na každým PC to bude jinak, i na stejným PC to bude jinak v závislost na vytížení procesoru.
Našly by se i jiný způsoby:
https://stackoverflow.com/questions/33289726/combination-of-async-function-await-settimeout