Question

Il serait extrêmement utile si je pouvais faire ceci:

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

Toutefois, cela ne semble de faire ce que je veux. Je me rends compte que la boucle finirait par devoir boucler sur sa fonction de parent (qui a également, sans surprise, ne se fait pas).

Est-ce impossible parce que « ceci » dans la deuxième fonction se réfère à la deuxième fonction et non la première? Ou est le mot-clé « ce » seulement un opérateur de déclaration pour un membre du public et non une référence à l'objet externe?

Je figure obtenir ce que je veux de cette façon est pas possible, mais est-il une autre façon, je peux aller sur la réalisation de ce comportement?

Était-ce utile?

La solution

Je pense que vous essayez d'obtenir la valeur du membre et va à ce sujet dans le mauvais sens alors essayez ceci:

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

Pour expliquer: la vérification de la boucle d'abord si la propriété est une propriété définie par l'utilisateur au lieu d'être héritée de l'objet de l'objet. Il vérifie également que le membre n'est pas une fonction (comme validate ()) il avertit alors la valeur du membre.

Le contrôle hasOwnProperty est recommandé par Douglas Crockford (père de JS) comme la meilleure pratique lorsque vous parcourez memebers.

Hope this helps,

Darko

EDIT: J'ai oublié de mentionner self - i compris cela parce que sa façon standard de faire en sorte que votre est en fait ce que vous voulez qu'il soit

.

Autres conseils

Comment appelez-vous validate?

Le code suivant fonctionne très bien pour moi:

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();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top