objekt-methoden Aufruf
windhagen
- javascript
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");};
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?
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
@@windhagen:
nuqneH
if(!Ereignis) { Eieignis = window.event;
Eieiei, bist du sicher?
Qapla'
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
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