Axel Richter: Problem mit Objekten

Beitrag lesen

Hallo,

Ich verstehe das irgendwie nicht... Ich habe etwas in Javascript geschrieben, um die Position des letzten Mausklicks sowohl auf der x als auch auf der y Achse zu dokumentieren. Leider werden diese nicht verändert, was ich total doof finde *gg. Ich denke, das wäre gar nicht so schwierig aber ich will dies mit eigenen Objekten machen, doch das funktioniert irgendwie nicht. Ich muss unbedingt wissen, was falsch ist, denn dieser kleine Codeschnipsel soll hinterher zu etwas anderem ausgebaut werden, deswegen auch die Objekte.
Na dann, hier der Codeschnipsel:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<script type="text/javascript" language="javascript">
function Mouse ()
{
this.xStart = 0;
this.yStart = 0;
//this.method_update;

//     ^Du glaubst, die Namensgleichheit bringt irgendwas? Nein. Das eine method_update ist im scope Mouse, das andere im scope window. Sie wissen beide voneinander nichts. Also:

this.method_update = window.method_update;

//Besser, Du kapselst Die Funktion aber gleich mit in Dein Objekt ein. Siehe unten.

}

var objMouse = new Mouse();

function method_update(Event)
{
if (!Event)
Event = document.event;

//      ^Ähm, Du meinst gewiss window.event.

this.xStart = Event.clientX;
this.yStart = Event.clientY;

alert(this.xStart + ", " + objMouse.xStart);
 //^Dieses alert zeigt Dir, dass sich schon was ändert, aber eben nur this.xStart im scope Mouse, nicht objMouse.xStart im scope window. Das liegt daran, dass ...

}
//document.onmousedown = objMouse.method_update;

//                               ^... hier die event-Übertragung unterbrochen wird. Das event Objekt des scopes window wird nicht in den scope Mouse übergeben. Besser:

document.onmousedown = function(Event) {objMouse.method_update(Event);};

</script>
<title>test_data</title>
</head>

<body id="body">
<a href="#" onclick="alert(objMouse.xStart);">Klick mich</a>
</body>
</html>

Ich würde das Ganze noch etwas stärker kapseln:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<script type="text/javascript" language="javascript">
function Mouse ()
{
 this.xStart = 0;
 this.yStart = 0;
 this.method_update = function(Event)
 {
  if (!Event) Event = window.event;
  this.xStart = Event.clientX;
  this.yStart = Event.clientY;
 };
}

var objMouse = new Mouse();

document.onmousedown = function(Event) {objMouse.method_update(Event);};
</script>
<title>test_data</title>
</head>

<body id="body">
<a href="#" onclick="alert(objMouse.xStart);">Klick mich</a>
</body>
</html>

viele Grüße

Axel