문제

내가 이것을 할 수 있다면 매우 편리합니다.

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

그러나 이것은 그렇지 않습니다 ~인 것 같다 내가 원하는 것을하기 위해. 나는 루프가 결국 부모의 기능을 반복해야한다는 것을 알고있다 (놀랍게도, 일어나지 않는다).

두 번째 함수의 'this'가 첫 번째 함수가 아니고 첫 번째 함수가 아니기 때문에 이것이 불가능합니까? 아니면 키워드 '이'는 공개 회원의 선언 연산자 일 뿐이며 외부 객체에 대한 참조가 아닌가?

나는 이런 식으로 원하는 것을 얻는 것이 불가능하다고 생각하지만이 행동을 달성 할 수있는 또 다른 방법이 있습니까?

도움이 되었습니까?

해결책

나는 당신이 회원의 가치를 얻으려고 노력하고 있고 그것에 대해 잘못된 길로 가고 있다고 생각합니다.

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

설명 : 루프는 먼저 객체 객체에서 상속받는 대신 속성이 사용자 정의 속성인지 확인합니다. 또한 멤버가 함수가 아닌지 확인합니다 (Validate ()와 같이)는 멤버의 값을 경고합니다.

HasownProperty 확인은 Douglas Crockford (JS의 아버지)가 Memebers를 반복 할 때 모범 사례로 권장합니다.

도움이 되었기를 바랍니다,

DARKO

편집 : 언급하는 것을 잊었습니다 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