Autor Zpráva
mtichysp
Profil
Dobrý den, prosím o pomoc

Mám dva objekty na sobě nezávislé.

Obj1 - statická třída
Obj2 - objekt
Princip: Po přidání položky v Obj1 se spustí metoda z Obj2.jePridano(). Jenže tady je problém. V metodě jePridano() je odkaz na proměnou promenna1 přes this. Při nastavení spouštěcí metody do Obj1.func se funkce přepíše a this je tedy nyní Obj1 a ne Obj2.

Jak z toho ven? :-)

var Obj1=function(){};
Obj1.func=null;
Obj1.pridejPolozku=function(vstup){
    //    zde je kód pro přidání - AJAX asynchronní ....
    
    //    po dokončení zavoláme funkci
    Obj1.func(id, nazev);
};

//    ----------------------------

var Obj2=function(){
    this.promenna1=null;
    this.promenna2=null;
    
    this.jePridano=function(){
        this.promenna1="pridano";
        alert("ok");
    };
};

//    ---------------------
//    v těle stránky

window.onload=function(){
    var instanceObj2=new Obj2();
    obj1.func=instanceObj2.jePridano();
    obj1.pridejPolozku("test");
}

Díky.
_es
Profil
mtichysp:
Kód vyzerá veľmi nezmyselný, pokús sa radšej najprv naštudovať základy.
Prečo je Obj1 funkcia, keď tak nie je používaná? Okrem toho je zvykom, že funkcie s veľkým prvým písmenom sú volané pomocou new.
Na 7. riadku voláš funkciu v Obj1.func, no v 27. riadku do Obj1.func dávaš undefined (návratovú hodnotu z instanceObj2.jePridano).
Mal by si najprv poriadne navrhnúť, na čo má ktorý objekt a jeho metódy slúžiť a aj ich vhodne nazvať, aby sa v tom dalo vyznať.
Ak sa chceš odkazovať na hodnotu v this nie v čase volania funkcie, ale aká bola skoršie, tak si tú hodnotu ulož skôr do nejakej premennej.

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: