ChrisB: Javascript "Fortgeschritten" ?!

Beitrag lesen

Hi,

meine erste frage:
welches objekt muss ich erweitern das ich wie oben schreiben kann:

function echoId()
{
   alert(this.id);
}
document.getElementById("test").echoId();

Da dir document.getElementById die Referenz auf ein (beliebiges) HTML-Element zurückliefert, müsstest du alle HTMLElementObject-e entsprechend erweitern, damit sie diese Methode besitzen.

ich verstehe das getElementById eine "Methode" von dem Objekt "document" ist
... natürlich ist die Funktion auch wieder ein eigenes Objekt wie alles in javascript ... aber ich kann nicht einfach schreiben
[code lang=javascript]
getElementById.echoId = echoId; //das klappt nicht
document.getElementById.echoId = echoId; //das auch nicht

  
Natürlich nicht, weil du über den . ja das Objekt ansprichst, welches getElementById zurückgeliefert hat.  
  

> das prototype framework setzt ja noch einen drauf mithilfe dessen kann man ja zb schreiben:  
>   
> ~~~javascript
  

> $("test").hide(); //nur als beispiel  
> 

wenn man sich aber den quelltext von der function hide() anschaut (ausschnitt):

hide: function(element) {
    element = $(element);
    element.style.display = 'none';
    return element;
  },


> (ist halt eine etwas andere schreibweise aber das tut ja jetzt nichts zur sache)  
> da finde ich keine "this" wie bei mir um auf das darüber liegende objekt zuzugreifen.  
  
Wozu sollte da irgendwo this gebraucht werden?  
Mit  
`element = $(element);`{:.language-javascript}  
wird die Referenz auf ein Element besorgt, und anschliessend kann über element darauf zugegriffen werden.  
  
Die Schreibweise mag etwas seltsam anmuten, weil dort zwei mal element verwendet wird. Das ist eine Eigenschaft von Prototyp und seiner $-Methode - der kannst du entweder direkt eine Elementreferenz übergeben, oder auch einen Selektor (wie bspw. die ID), aus dem dann die Referenz auf ein Element erst ermittelt wird.  
  
MfG ChrisB  
  

-- 
“Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]