Pregunta

Sería muy útil si pudiera hacer esto:

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

Sin embargo, esto no parecen para hacer lo que querría. Soy consciente de que el bucle eventualmente tendría que bucle sobre su función de padres (que también, como es lógico, no sucede).

Es esto imposible porque el 'esto' en la segunda función se refiere a la segunda función y no el primero? O es la palabra clave 'esto' Sólo un operador de la declaración de un miembro del público y no una referencia al objeto externo?

Figura conseguir lo que quiero de esta manera no es posible, pero hay otra manera puedo ir sobre la realización de este comportamiento?

¿Fue útil?

Solución

Creo que está tratando de obtener el valor de la pieza y va sobre el camino equivocado por lo intente lo siguiente:

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

Para explicar: la comprobación de bucle primero si la propiedad es una propiedad definida por el usuario en lugar de ser heredado del objeto Object. También comprueba que el miembro no es una función (como validate ()) entonces alerta al valor del miembro.

El cheque hasOwnProperty es recomendado por Douglas Crockford (padre de JS) como la mejor práctica cuando se itera sobre memebers.

Espero que esta ayuda,

Darko

EDIT: Se me olvidó mencionar self - i incluido esta porque es la forma estándar de asegurarse de que su presente es en realidad lo que quiere que sea

.

Otros consejos

¿Cómo estás llamando validate?

El siguiente código funciona bien para mí:

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();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top