Autor | Zpráva | ||
---|---|---|---|
ondrakrajcik Profil * |
#1 · Zasláno: 8. 12. 2014, 14:24:55 · Upravil/a: Moderátor (editace znemožněna) 8. 12. 2014, 18:08:08
Dobrý den,
narazil jsem v typeScriptu na problém mám nějakou třídu: class A{ ... private init() { this.refresh(); } private refresh() {....} ... } V kodu mám nějaký button po kterém se vyvolá událost click a zavolá se init na objekt třídy A. Když se vykonává init tak chce zavolat metodu refresh,ale do console mně vyskočí chyba "Uncaught TypeError undefined is not function ... " Nevíte někdo co může být špatně? :-( |
||
Jan Tvrdík Profil |
Asi špatně předáváš ten callback na metodu
init . Místo this.init předej this.init.bind(this) .
Viz také developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind |
||
Karel N. Profil |
Co tohle je za šílenost? :)
Vypadá to, že to špatně používáš. Musíš si vytvořit instanci třídy A a poté na ní můžeš volat metody a používat contenxt ( this ). Ty se snažíš volat staticky metodu init a divíš se, že neexistuje context (undefined is not function , protože this obsahuje globální scope, která nemá žádnou funkci refresh ).
Třídu bys měl používat nějak takto: Class A { constructor(public event: Event) { //při použití tříd má construktor výzman přibližně tvého init } public refresh() { //... } } object.onclick=function(event){ new A(event) }; PS: private je klíčové slovo, která znamená, že se metoda (funkce) nevolá z venku, tj. mimo samotnou třídu. V typescriptu můžeš na takovouhle metodu přistoupit, protože jí také vloží do prototype vygenerované třídy. Používej klíčové slovo public , pokud se jedná o veřejnou metodu.
PPS: každopádně tohle není dobrý use case, třídy bys měl používat trochu jinak. Když sem poskytneš zbytek kódu, jak vypadá navěšení na click a co vše třída dělá, poradím ti, jak kód strukturovat.
|
||
Časová prodleva: 10 let
|
0