そのオブジェクトの関数内のオブジェクトのすべてのメンバーを反復処理

StackOverflow https://stackoverflow.com/questions/1115269

  •  12-09-2019
  •  | 
  •  

質問

私はこれを行うことができれば、それは非常に便利になります:

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

しかし、これはは、私が望むものを行うために、のようではありません。私はそれは(も、驚くことではないが、発生しません)親関数だ上でループが最終的にループしなければならないことを実現します。

第二の機能で「これが」第一、第二の機能を参照していないので、このことは不可能ですか?またはキーワードは「この」のみ宣言、パブリックメンバーのための演算子ではなく外側のオブジェクトへの参照です?

私はこの方法が不可能であるが、私は、この動作を達成するためについて行くことができ、別の方法がある望むものを得て、図?

役に立ちましたか?

解決

私はこれを試してみてください、あなたがメンバーの値を取得しようとし、それについて間違った道を進んでいると思います

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

を説明するには、次のループチェックを第1のオブジェクトのオブジェクトから継承されているとは対照的に、プロパティは、ユーザ定義のプロパティである場合。また、メンバーは、それが次いでメンバの値を警告する。(検証()のような)関数ではないことを確認

memebers繰り返し処理を行う場合、

hasOwnPropertyをチェックは、ベストプラクティスとしてダグラス・クロックフォード(JSの父)によって推奨されます。

この情報がお役に立てば幸い、

ダルコ

EDIT:selfを言及するのを忘れた - 私はこれが含まれているため、あなたのこれはあなたがそれを可能にするものを実際にあることを確認し、その標準的な方法

他のヒント

どのようにしてvalidateを呼び出している?

次のコードは、私のために正常に動作します:

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();
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top