abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
dnes 02:22 | Pozvánky

Fedora 31 Release Party, tj. oslava nedávného vydání Fedory 31, se uskuteční ve středu 20. listopadu v Brně. Program přednášek bude upřesněn.

Ladislav Hagara | Komentářů: 0
dnes 01:11 | Nová verze

Příspěvek na blogu webové aplikace pro spolupráci na zdrojových kódech pomocí gitu Gitea (Wikipedie) představuje novinky a ukazuje náhledy nové major verze 1.10.0 této v programovacím jazyce Go naprogramované aplikace. Nově jsou například vedle sebe zobrazovány původní a nové verze obrázků.

Ladislav Hagara | Komentářů: 0
včera 22:33 | IT novinky

Společnost Docker stojící za stejnojmennou kontejnerovou technologií čelila vážným finančním problémům. Stávající investoři do ní ale vložili dalších 35 milionů dolarů a společnost Mirantis odkoupila Docker Enterprise.

Ladislav Hagara | Komentářů: 0
včera 16:11 | IT novinky

Od 24. listopadu bude možné předobjednat přenosný počítač Pocket Popcorn Computer (Pocket P.C.) s 1.2 GHz Quad-Core ARM Cortex-A53 CPU, 2GB DDR3 RAM, 32GB eMMC Memory, 4.95" Full HD IPS LCD a 3200 mAh Removable Battery. Počítač by měl být odesílán v květnu 2020. Předinstalován by měl být Debian 10.

Ladislav Hagara | Komentářů: 23
včera 11:11 | Komunita

Canonical věnoval nadaci UBports další telefony a tablety pro podporu vývoje Ubuntu Touch, tj. Ubuntu pro telefony a tablety. Vybraní vývojáři Ubuntu Touch je mohou získat zdarma.

Ladislav Hagara | Komentářů: 7
včera 09:33 | Zajímavý projekt

Společnost GitHub v rámci svého GitHub Archive Programu vytvoří několik off-line záloh open source softwaru nacházejícího se na GitHubu pro budoucí generace. První taková záloha všech aktivních repozitářů proběhne 2. února 2020 ve spolupráci se společností Pigl na jejich piqlFilmy a uložena bude v Arktickém světovém archivu. Případné obnovení ze zálohy by mělo být možné i za 1 000 let.

Ladislav Hagara | Komentářů: 6
včera 05:55 | Nová verze

Dnes a zítra probíhá v Praze konference Internet a Technologie 19 pořádaná sdružením CZ.NIC. Sledovat ji lze online.

Ladislav Hagara | Komentářů: 1
13.11. 19:44 | Nová verze

Brendan Eich, mj. autor JavaScriptu a několikadenní CEO Mozilly, představil v lednu 2016 webový prohlížeč Brave (Wikipedie, GitHub). Dnes byla vydána verze 1.0 tohoto webového prohlížeče. K dispozici jsou také balíčky pro Linux.

Ladislav Hagara | Komentářů: 11
13.11. 17:11 | Pozvánky

Spolek OpenAlt zve příznivce otevřených řešení a přístupu na 170. brněnský sraz, který proběhne v pátek 15. listopadu od 18:00 v restauraci Vegalité (Slovákova 10).

Ladislav Hagara | Komentářů: 2
13.11. 11:55 | Nová verze

Po půl roce vývoje od vydání verze 5.2 byla vydána nová verze 5.3 svobodného open source redakčního systému WordPress. Kódové označení Kirk bylo vybráno na počest amerického jazzového multiinstrumentalisty Rahsaana Rolanda Kirka.

Ladislav Hagara | Komentářů: 9
Jaké hodinky nosíte (nejčastěji)?
 (24%)
 (7%)
 (14%)
 (55%)
Celkem 147 hlasů
 Komentářů: 10, poslední včera 16:20
Rozcestník

www.AutoDoc.Cz

Dotaz: Javascript - Nefunkční this uvnitř funkce

13.10. 14:59 zacatecnickej
Javascript - Nefunkční this uvnitř funkce
Přečteno: 312×
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);

Řešení dotazu:


Odpovědi

13.10. 15:26 Kit | skóre: 43 | Brno
Rozbalit Rozbalit vše Re: Javascript - Nefunkční this uvnitř funkce
Ta anonymní funkce není součástí třídy a proto nemůže vidět její komponenty.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
13.10. 15:44 zacatecnickej
Rozbalit Rozbalit vše Re: Javascript - Nefunkční this uvnitř funkce
A jde to opravit aby nebyla anonymní ta funkce ale zůstala funkční a viděla this?
Řešení 1× (BoneFlute)
13.10. 15:51 Andrej | skóre: 47 | blog: Republic of Mordor | Zürich
Rozbalit Rozbalit vše Re: Javascript - Nefunkční this uvnitř funkce

Můžeš ji volat a voláš ji. Jenom ta funkce vůbec nic nedělá. Celý ten kód je minimálně dvojitý arcinesmysl. :-D

Zaprvé, ta inline funkce, kterou plánuješ tím časovačem (za 100 milisekund), nemá vůbec žádný efekt, zavolá test(), ten vrátí 'bar', inline funkce pak vrátí výsledek toho test()u, tedy zase 'bar', ale ten nikoho nezajímá, takže se ztratí a zapomene.

Zadruhé, to, co se tam snažíš vypsat pomocí console.log(), nemá žádnou spojitost s návratovou hodnotou funkce test() (jestli o tohle šlo). V proměnné a je návratová hodnota funkce show(), která je undefined, protože ve funkci show() není žádný return statement. Tady si můžeš přečíst, jak správně vracet hodnoty z asynchronních volání a setTimeout().

Zatřetí, v té inline funkci se nedá přistupovat k implicitnímu parametru this takhle přímo, protože taková inline funkce je (velmi zjednodušeně řečeno) buďto jiný objekt nebo úplně mimo kontext jakéhokoliv objektu, tj. proměnnou this nemá vůbec definovanou. Tohle je taky známá věc, stačí jenom hledat.

class Foo {
  constructor(message) {
    this.message = message;
  }
  show() {
    var _this = this;
    setTimeout (function() {
      console.log(_this.message);
    }, 1000);
  }
}

var foo = new Foo('blahblah');
foo.show();
console.log('Show scheduled!');
ǑǦŹǓǕǙǞǺǨȞȬḔḦḰḾṊṎṸẄẌỖ
13.10. 15:56 Andrej | skóre: 47 | blog: Republic of Mordor | Zürich
Rozbalit Rozbalit vše Re: Javascript - Nefunkční this uvnitř funkce

Oprava: Ta metoda test() původně nebyla volaná vůbec (právě kvůli problému č. 3 s použitím this). To mi nějak uniklo.

ǑǦŹǓǕǙǞǺǨȞȬḔḦḰḾṊṎṸẄẌỖ
13.10. 17:02 zacatecnickej
Rozbalit Rozbalit vše Re: Javascript - Nefunkční this uvnitř funkce
Ahoj, díky moc. Mě jde opravdu jenom o tuto funkci 'setTimeout' kterou mám v nějaké metodě a v té funkci se potřebuji dostat přímo na this, jde to i bez použítí var _this = this ; ?
setTimeout ( function (){
   this.test();
},100);
14.10. 00:47 Andrej | skóre: 47 | blog: Republic of Mordor | Zürich
Rozbalit Rozbalit vše Re: Javascript - Nefunkční this uvnitř funkce

Tu inline funkci si lze představit jako metodu v oddělenén samostatném objektu, tj. i kdyby tam this byl definovaný, ukazoval by na jinou instanci jiného typu.

Nechápu, co míníš formulací „přímo na this“. Když si uložíš var _this = this, pak _this ukazuje přímo na ten původní objekt, na který ukazoval this. Je to reference. Jde jen o formalitu s uložením té reference v kontextu, který bude později dostupný dynamické inline funkci; nic přímého / nepřímého bych za tím nehledal.

ǑǦŹǓǕǙǞǺǨȞȬḔḦḰḾṊṎṸẄẌỖ
18.10. 10:56 krab
Rozbalit Rozbalit vše Re: Javascript - Nefunkční this uvnitř funkce

Dobry den, pouzijte metodu bind:

 

setTimeout(function () {
   this.test();
}.bind(this), 100);

 

Aby Vas ukazkovy kod spravne fungoval, je nutne pouzit promise:

 

class Foo {
   test() {
      return 'bar';
   }

   show() {
      return new Promise(function(resolve, reject) {
         setTimeout (function () {
            resolve(this.test());
         }.bind(this), 100);
      }.bind(this));
   }
};

var foo = new Foo();
var a = foo.show();
a.then(console.log);
18.10. 18:55 crap
Rozbalit Rozbalit vše Re: Javascript - Nefunkční this uvnitř funkce
Konecne nekdo kdo umi slusne a vecne odpovedet

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.