Tak for svaret. Jeg tror nu at jeg har indset, at alle mine bekymringer er overflødige, fordi skidtet fortolkes i stedet for at blive oversat. Jeg troede det var nødvendigt at benytte et interface (i stil med Java) for at kunne gøre
function f(object){ object.update(); }
hvor det ikke er helt fastlagt hvilken type object har, men da javascript fortolkes og er så løst typet, er det nok lige meget. Skriv et svar, så du kan få nogle point.
JavaScript forsøger automatisk at lave et typecast. Hvis du vil være sikker på at object i dit eksempel ret faktisk er en Observer skal du gøre det omvendt af hvad du plejer function f(object){ if(!(object instanceof Observer)) throw new Error("Illegal argument. Not an Observer"); object.update(); }
Her er et illustrativt eksempel <script> function Observer(n) { this.n = n; this.update = function(val) { this.n=val; } }
function ImageObserver(n) { this.src=n; } ImageObserver.prototype = new Observer; // Arve fra Observer myObj = new ImageObserver("b"); myObj.update("a"); alert(myObj.n); alert(myObj.src); alert(myObj.constructor); alert(myObj instanceof Observer);
function f(object){ if(!(object instanceof Observer)) throw new Error("Illegal argument. Not an Observer"); object.update("Funktionen kørt"); } f(myObj); alert(myObj.n); f("e"); </script>
En anden lille ting. Der er intet umiddelbart i JavaScript der forhindrer at konstruktorer bliver kørt som funktioner!! Det kan være meget uheldigt, men der er råd for det. <script> function Observer(n) { // if(!(this instanceof Observer)) throw new Error("Object must be instantiated."); this.n = n; this.update = function(val) { this.n=val; } } Observer("n"); new Observer("n"); </script>
Prøv at køre det her. Fjern derefter udmarkeringen og prøv igen. JavaScript er putativt objekt-orienteret, men kan køres funktions-orienteret. I Netscape/Mozilla er der virkelig mange ting man kan lave objekt-orienteret. Man kan for eksempel lave et objekt der arver fra <div>!
Jeg bliver nød til at spørge om det er hensigten jeg skal have point? Ellers er det bedst at lukke for spørgsmålet.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.