Frühstücker: membervariablen gelöscht

Hallo zusammen

hab ein ziemlich beknacktes Problem

Total banane:

function colorslider(startRGB,endRGB,steps)
{
   ...
 this.dR = 0;
 this.dG = 0;
 this.dB = 0;
   ...
 this.set = set;
 set(startRGB, endRGB, steps);
 alert('dR = '+this.dR+'  dR = '+this.dG+'  dB = '+this.dB);
}
...
function set(startRGB,endRGB,steps)
{
    ...
//   dR,dG,dB werden berechnet
    ...

alert('dR = '+this.dR+'  dR = '+this.dG+'  dB = '+this.dB);
}

Beim erzeugen eines colorsliders spuckt alert in der set() fkt
zuerst die korrekt berechneten Zahlen aus.
Direkt danach in der colorslider() Fkt sind dann plötzlich alle Variablen wieder = 0 . . . gelöscht.

Was das denn ???!?!? Hab ich was verpeilt oder javascript.
Ist im FF und im IE dasselbe.

Wenn ich die
 this.dR = 0;
 this.dG = 0;
 this.dB = 0;
herausnehme berechnet er auch korrekt, aber hinterher sind alle
Variablen 'undefined'.

Banane . . :-V

Vielleicht kann mich jemand aufklären was hier los ist . .

Danke im voraus

  1. Hallo,

    Was das denn ???!?!? Hab ich was verpeilt oder javascript.

    Das bist du...

    alert('dR = '+this.dR+'  dR = '+this.dG+'  dB = '+this.dB);

    Worauf bezieht sich wohl jeweils "this"?

    Gruß, Don P

    1. Hallo,

      Was das denn ???!?!? Hab ich was verpeilt oder javascript.

      Das bist du...

      alert('dR = '+this.dR+'  dR = '+this.dG+'  dB = '+this.dB);

      Worauf bezieht sich wohl jeweils "this"?

      Gruß, Don P

      Habs noch nich :

      Die set Fkt ist member der colorslider Fkt und greift per this auf dessen membervars zu.
      Richtig?

      In der colorslide Fkt UND auch von ausserhalb bleiben die Variablen jedoch 0 bzw. undefined.

      Hab es jetzt mal so geprüft:
      var a = new colorslider(a,e,d)
      alert('dR = '+a.dR+'  dR = '+a.dG+'  dB = '+a.dB);

      . . . dasselbe Ergebnis.

      stehe immernoch auf dem Schlauch . . .

  2. hab ein ziemlich beknacktes Problem

    Es ist ja ok, wenn du dich ein bisschen flapsig ausdrückst, nur wird es dadurch etwas schwieriger dein Problem zu verstehen.

    function colorslider(startRGB,endRGB,steps)
    {
       ...
    this.dR = 0;
    this.dG = 0;
    this.dB = 0;
       ...
    this.set = set;

    So, hab ich früher auch Memberfunktionen deklariert, ist aber nicht schön. In deinem Fall bietet sich protoype an

    colorslider.prototype.set = .....

    Dann sparst du dir das this.set = set

    set(startRGB, endRGB, steps);

    Das ist Unfug, wo ist das Objekt?

    Struppi.

  3. Hi,

    function colorslider(startRGB,endRGB,steps)
    {

    [...]

    set(startRGB, endRGB, steps);

    was macht diese in keinem Zusammenhang mit colorslider() stehende Funktion?

    Beim erzeugen eines colorsliders spuckt alert in der set() fkt
    zuerst die korrekt berechneten Zahlen aus.
    Direkt danach in der colorslider() Fkt sind dann plötzlich alle Variablen wieder = 0 . . . gelöscht.

    Gelöscht? Sie wurden nie gesetzt. set() tut irgendwas, hat aber keinerlei Bezug auf das colorslider()-Objekt. Dazu muss es nicht nur eine Methode des Objektes sein, sondern auch entsprechend angesprochen werden.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hi,

      function colorslider(startRGB,endRGB,steps)
      {
      [...]
      set(startRGB, endRGB, steps);

      was macht diese in keinem Zusammenhang mit colorslider() stehende Funktion?

      Beim erzeugen eines colorsliders spuckt alert in der set() fkt
      zuerst die korrekt berechneten Zahlen aus.
      Direkt danach in der colorslider() Fkt sind dann plötzlich alle Variablen wieder = 0 . . . gelöscht.

      Gelöscht? Sie wurden nie gesetzt. set() tut irgendwas, hat aber keinerlei Bezug auf das colorslider()-Objekt. Dazu muss es nicht nur eine Methode des Objektes sein, sondern auch entsprechend angesprochen werden.

      Cheatah

      Keinerlei bezug? nagut! Ich dachte das wäre so miteinander Verknüpft!

      Dann weiss ich jetzt zumindest das es so nicht geht!

      Dann such ich mal nach dem richtigen Weg . . . .

      greetz

      1. Hi,

        Keinerlei bezug? nagut! Ich dachte das wäre so miteinander Verknüpft!

        durch ein "this.irgendwas = set;" hast Du die Funktion set() nicht verändert. Insbesondere hast Du sie nicht auf eine Objektinstanz eingeschworen, zu der es noch siebzehnmilliarden andere Objektinstanzen geben kann, die sich alle das selbe Recht auf die Funktion anmaßen.

        Dann such ich mal nach dem richtigen Weg . . . .

        Take 'this' way ;-)

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes