Sucher: this auf window statt auf mein objekt

Hi

kann mir bitte jemand bei folgendem Problem helfen?

BlaBla = function(par) {
  this.a = par;
  this.b = false;
  this.c = "hallo";
}

BlaBla.prototype = {

func1 = function() {
  alert(this.c);
},

func2 = function() {
  // do something else
}

function test() {
// do vieles :)
bla = new BlaBla(par);
bla.func1()
}

Das Problem ist dass beim aufruf von bla.func1() das this in dieser funktion nicht auf mein BlaBla zeigt sondern auf window.

Ich muss zugeben ich kenne mich mit diesen "scopes" und wann es window ist etc. noch nicht so aus. Es wäre aber trotzdem gut wenn mir einer Helfen könnte wie ich das Problem lösen kann.

Wichtig anzumerken ist dass ich alles mit dem Objekt / Klasse / Prototyp BlaBla ( wie auch immer man es in JS nennt )  _NICHT_ ändern KANN.

Ich kann nur mein Aufruf in der Funktion test() etc. ändern.

Vll kann wer helfen ...

mfg

  1. Hi

    kann mir bitte jemand bei folgendem Problem helfen?

    BlaBla = function(par) {
      this.a = par;
      this.b = false;
      this.c = "hallo";
    }

    BlaBla.prototype = {

    func1 = function() {
      alert(this.c);
    },

    func2 = function() {
      // do something else
    }
    }

    function test() {
    // do vieles :)
    bla = new BlaBla(par);
    bla.func1()
    }

    Das Problem ist dass beim aufruf von bla.func1() das this in dieser funktion nicht auf mein BlaBla zeigt sondern auf window.

    Ich muss zugeben ich kenne mich mit diesen "scopes" und wann es window ist etc. noch nicht so aus. Es wäre aber trotzdem gut wenn mir einer Helfen könnte wie ich das Problem lösen kann.

    Wichtig anzumerken ist dass ich alles mit dem Objekt / Klasse / Prototyp BlaBla ( wie auch immer man es in JS nennt )  _NICHT_ ändern KANN.

    Ich kann nur mein Aufruf in der Funktion test() etc. ändern.

    Vll kann wer helfen ...

    mfg

    sorry so muss es richtig heißen habe eine klammmer vergessen!

  2. kann mir bitte jemand bei folgendem Problem helfen?

    würdest du bitte den Code den du uns zeigst ausprobieren, der funktioniert nicht.

    BlaBla.prototype = {

    func1 = function() {
      alert(this.c);
    },

    Hier hast du u.a. einen Fehler eingebaut, wenn du den entferst, dann läuft dieser Code einwandfrei.

    Das Problem ist dass beim aufruf von bla.func1() das this in dieser funktion nicht auf mein BlaBla zeigt sondern auf window.

    Doch tut es.

    Ich muss zugeben ich kenne mich mit diesen "scopes" und wann es window ist etc. noch nicht so aus. Es wäre aber trotzdem gut wenn mir einer Helfen könnte wie ich das Problem lösen kann.

    Welches Problem, der Code funktioniert:

    var BlaBla = function(par) {  
      if(!par) par = {};  
    this.a = par;  
      this.b = false;  
      this.c = "hallo";  
    }  
      
    BlaBla.prototype = {  
      
    func1:function() {  
      alert(this.c);  
    },  
      
    func2:function() {  
      // do something else  
    }  
    };  
      
      
      
    function test() {  
    // do vieles :)  
    bla = new BlaBla({});  
    bla.func1();  
    }  
    test();
    

    Wichtig anzumerken ist dass ich alles mit dem Objekt / Klasse / Prototyp BlaBla ( wie auch immer man es in JS nennt )  _NICHT_ ändern KANN.

    Ich kann nur mein Aufruf in der Funktion test() etc. ändern.

    Was auch immer dein eigentliches Problem ist, ohne Änderung an der Klasse wirst du es nicht lösen können.

    Struppi.

    1. Lieber Struppi,

      var BlaBla = function(par) {

      if(!par) par = {};
      this.a = par;

        
      geht das nicht eleganter so?  
      ~~~javascript
        
      var BlaBla = function (par) {  
          this.a = par || {};
      

      Liebe Grüße,

      Felix Riesterer.

      --
      ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
      1. geht das nicht eleganter so?

        Sicher, aber der Code ist sowieso nicht der um den sich die Fragestellung dreht.

        Struppi.