windhagen: objekt-methoden Aufruf

Hallo zusammen.
Hat vielleicht jemand einen Denkanstoß für mich, warum der Methodenaufruf aus dem Switch-Block nicht funktioniert? Mir als altem Pfuscher fehlen leider die Worte, um das Problem fachgerecht zu beschreiben. Daher hier der Code, der hoffentlich für sich spricht:

Vielen Dank für Eure Mühe und schöne Grüße aus Aachen,

windhagen.

  
  
function keyboard_watch()  
{  
  
  
	this.arrowUp_down = null;  
  
  
  
	this.keydown = function(Ereignis)  
	{  
		if(!Ereignis)  
		{  
			Eieignis = window.event;  
		}  
		  
		if(Ereignis.which)  
		{  
			var tastenCode = Ereignis.which;  
		}  
  
		else if(Ereignis.keyCode)  
		{  
			var tastenCode = Ereignis.keyCode;  
		}  
  
  
		  
  
		switch(tastenCode)  
		{  
			case 38:		// arrowUp  
  
// PROBLEM >>>>>>>>>>>  
			 this.arrowUp_down;  
// PROBLEM ENDE >>>>>  
  
  
			 break;  
		  
		}  
  
  
		//alert(tastenCode);  
		  
	}  
  
  
  
	  
  
	this.keyup = function(Ereignis)  
	{  
		if(!Ereignis)  
		{  
			Ereignis = window.event;  
		}  
		  
		if(Ereignis.which)  
		{  
			var tastenCode = Ereignis.which;  
		}  
  
		else if(Ereignis.keyCode)  
		{  
			var tastenCode = Ereignis.keyCode;  
		}  
  
	  
		  
	}  
  
  
  
  
  
	document.onkeydown = this.keydown;  
	document.onkeyup = this.keyup;  
}//----------------------------------------------- keyboard_watch() ENDE  
  
  
  
  
  
  
var keyboard = new keyboard_watch;  
keyboard.arrowUp_down = function(){alert("ArrowUp_down Test");};  
  
  

  1. Hi,

    	switch(tastenCode)  
    
      {  
      	case 38:		// arrowUp  
    

    // PROBLEM >>>>>>>>>>>
    this.arrowUp_down;
    // PROBLEM ENDE >>>>>

      
    
    > Hat vielleicht jemand einen Denkanstoß für mich, warum der Methodenaufruf aus dem Switch-Block nicht funktioniert?  
      
    Weil this dort nicht das ist, was du denkst.  
      
    <http://aktuell.de.selfhtml.org/artikel/javascript/organisation/#methoden-eigener-objekte-und-kontext>  
      
    MfG ChrisB  
      
    
    -- 
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    
  2. Hallo windhagen,

      ~~~javascript
    

    if(!Ereignis)

      {  
      	Eieignis = window.event;  
    

    ^  Tippfehler?

    // PROBLEM >>>>>>>>>>>
    this.arrowUp_down;
    // PROBLEM ENDE >>>>>

      
    this bezieht sich hier nicht auf das Objekt, sondern auf das Eventauslösende Element. Du musst am Anfang die Referenz auf das Objekt zwischenspeichern:  
      
    ~~~javascript
    function keyboard_watch()  
    {  
        var dieses = this;  
      
    ...  
    
    

    und im Eventhandler

    dieses.arrowUp_down();

    mit(), da es doch ein Funktionsaufruf ist.

    Gruß, Jürgen

  3. @@windhagen:

    nuqneH

      if(!Ereignis)  
      {  
      	Eieignis = window.event;  
    

    Eieiei, bist du sicher?

    Qapla'

    --
    Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
    (Mark Twain)
  4. Hi,

    Hat vielleicht jemand einen Denkanstoß für mich, warum der Methodenaufruf aus dem Switch-Block nicht funktioniert?

    // PROBLEM >>>>>>>>>>>
    this.arrowUp_down;
    // PROBLEM ENDE >>>>>

    Abgesehen von den anderen Antworten:
    Wo ist da ein Aufruf?
    Ein Aufruf muß m.W. mit (ggf. leerer) Parameterliste in Klammern notiert werden.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
  5. function keyboard_watch()

    Um Konstruktoren von anderen Funktionen zu unterscheiden, schreibt man den ersten Buchstaben in der Regel groß.

    this.keydown = function(Ereignis)
    this.arrowUp_down;

    document.onkeydown = this.keydown;
    document.onkeyup = this.keyup;

    Siehe dazu Organisation von JavaScripten: Objektverfügbarkeit und this-Kontext.

    Grüße,
    Mathias