Frage

Es wäre sehr nützlich sein, wenn ich dies tun könnte:

var MyObject = function(param1, param2, ... paramN)
{
    this.var1 = stuff;
    this.var2 = moreStuff;
    .
    .
    .
    this.varN = nStuff;

    this.validate = function()
    {
        for(var current in this)
        {
            alert(current);
            //validate all member variables (even this function I suppose)
        }
    };
};

Dies ist jedoch nicht scheint zu tun, was ich möchte. Ich stelle fest, dass die Schleife schließlich Schleife haben würde über sie übergeordnete Funktion ist (was auch nicht überraschend, nicht passiert).

Ist dies nicht möglich, weil die ‚this‘ in der zweiten Funktion auf die zweite Funktion bezieht und nicht die erste? Oder ist das Schlüsselwort ‚this‘ nur eine Erklärung Betreiber für ein öffentliches Mitglied und kein Bezug auf das äußere Objekt?

Ich Figur zu bekommen, was ich will auf diese Weise nicht möglich ist, aber gibt es eine andere Art, wie ich über das Erreichen dieses Verhaltens gehen kann?

War es hilfreich?

Lösung

Ich glaube, Sie versuchen, den Wert des Elements zu erhalten und um es der falsche Weg, dies geht so versuchen:

      var MyObject = function() {
        this.var1 = 'var 1 value';
        this.var2 = 'var 2 value';
        this.varN = 'var n value';
        var self = this;

        this.validate = function() {
          for (var member in self) {
            if (!self.hasOwnProperty(member) || typeof(self[member]) === "function") continue;
            alert(self[member]);
          }
        };
      };

      var m = new MyObject();
      m.validate();

Um zu erklären: die Loopcheck zuerst, wenn die Eigenschaft eine benutzerdefinierte Eigenschaft ist im Gegensatz zu aus dem Objekt-Objekt geerbt werden. Es überprüft auch, dass das Mitglied keine Funktion (wie validate ()) dann alarmiert den Wert des Elements.

Die hasOwnProperty Prüfung wird von Douglas Crockford (Vater von JS) als Best Practice empfohlen, wenn über memebers iterieren.

Hope, das hilft,

Darko

EDIT: Vergessen self zu erwähnen - ich eingeschlossen, weil es das Standard-Weg, sicherzustellen, dass Ihr das ist eigentlich das, was Sie es sein wollen

.

Andere Tipps

Wie rufen Sie validate?

Der folgende Code funktioniert gut für mich:

var MyObject = function(){
    this.var1 = 'stuff';
    this.var2 = 'moreStuff';
    this.varN = 'Stuff';

    this.validate = function()
    {
        for(var current in this)
        {
            alert(current);
        }
    };
};

var m = new MyObject();
m.validate();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top