gruss wiberg,
function move() {
document.getElementById(this.posx).style.color = "#" + this.color;
window.setTimeout("this.move();",this.speed);
-----------------------^^^^^^^^^^^^^^
spaetestens an dieser stelle ist der interpreter ueberfordert, da "this.move();"
von der funktion "setTimeout" nicht mehr im richtigen kontext evaluiert werden
kann oder einfacher ausgedrueckt: "setTimeout" kann "this.move()" nirgendwohin
zuordnen, da "this" als zeichenkette innerhalb von "setTimeout" nicht mehr den
bezug zur methode "move" aufrechterhalten kann;
}
es muss also ein weg gefunden werden, der die referenz auf das objekt trotz der
gerade beschriebenen einschraenkungen durch "setTimeout" permanent ermoeglicht;
zur veranschaulichung schlage ich ersteinmal die "unsaubere" loesung vor, mit
namen von globalen variablen zu arbeiten; jedes objekt, welches spaeter die
"move"-methode aufrufen soll, benoetigt eine zusaetzliche eigenschaft, in der
sein globaler variablenname hinterlegt wird;
dieser name wird dann beim erstmaligen aufruf der methode mitgegeben und von
ebenjener dann permanent durchgeschliffen;
dein abgewandeltes bsp.:
function Sn(color) {
//this.posx = Math.floor(size/2);
this.color = color;
this.move = move;
}
function move(globalName,objectSpeed) {
//document.getElementById(this.posx).style.color = "#" + this.color;
alert("color = " + window[globalName].color + "\nspeed = " + objectSpeed);
window.setTimeout(("window["" + globalName + ""].move("" + globalName + ""," + objectSpeed + ")"),objectSpeed);
}
var x = new Sn("ffcc00");
x.globalName = "x";
x.speed = 3000;
x.move(x.globalName,x.speed);
ausserdem ist es ratsam, eigenschaften und methoden, die allen instanzen eines
konstruktors gemein sind, als prototypen der konstruktor-funktion zu realisieren -
fuer den oben beschriebenen fall saehe das so aus:
var Sn = function(color) {
//this.posx = Math.floor(size/2);
this.color = color;
};
Sn.prototype.move = function(globalName,objectSpeed) {
//document.getElementById(this.posx).style.color = "#" + this.color;
alert("color = " + window[globalName].color + "\nspeed = " + objectSpeed);
window.setTimeout(("window["" + globalName + ""].move("" + globalName + ""," + objectSpeed + ")"),objectSpeed);
};
Sn.prototype.speed = 3000; // time in msec;
var x = new Sn("ffcc00");
x.globalName = "x";
x.move(x.globalName,x.speed);
falls jetzt noch interesse an einem dieses thema ausfuehrlich diskutierenden
und beschreibenden thread besteht, empfehle ich als einstieg folgendes posting -
http://forum.de.selfhtml.org/archiv/2004/3/77173/#m445704 - sowie die
dort verlinkte javascript-loesung:
http://www.pseliger.de/jsExtendedApi/jsApi.Object.selfReferences.dev.js
viel erfolg - peterS. - pseliger@gmx.net
sh:| fo:) ch:? rl:| br:& n3:} n4:# ie:| mo:{ va:| de:[ zu:] fl:) ss:) ls:& js:)