Domanda

Sarebbe estremamente utile se avrei potuto fare questo:

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)
        }
    };
};

Questo però non sembrare per fare quello che vorrebbe. Mi rendo conto che il ciclo sarebbe poi dovuto ad anello su di esso la funzione di genitore (che anche, non a caso, non accade).

E 'questo l'impossibile perché 'questo' nella seconda funzione si riferisce alla seconda funzione e non il primo? O è la parola chiave 'questo' solo un operatore di dichiarazione per un membro del pubblico e non un riferimento all'oggetto esterno?

I figura ottenere quello che voglio in questo modo non è possibile, ma c'è un altro modo posso andare circa il raggiungimento di questo comportamento?

È stato utile?

Soluzione

Credo che si sta cercando di ottenere il valore del membro e andando su di esso nel modo sbagliato in modo da provare in questo modo:

      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();

Per spiegare: il controllo del ciclo prima se la proprietà è una proprietà definita dall'utente invece di essere ereditata dall'oggetto oggetto. Verifica inoltre che il membro non è una funzione (come validate ()) poi avverte il valore del membro.

Il controllo hasOwnProperty è consigliato da Douglas Crockford (padre di JS) come la migliore procedura l'iterazione di memebers.

Spero che questo aiuti,

Darko

EDIT: dimenticato di dire self - ho inserito questo perché è il modo standard di fare in modo che la vostra questo è in realtà ciò che si vuole che sia

.

Altri suggerimenti

Come stai chiamando validate?

Il seguente codice funziona bene per me:

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();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top