해당 개체의 함수 내에서 객체의 모든 멤버를 반복하십시오.
-
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)
}
};
};
그러나 이것은 그렇지 않습니다 ~인 것 같다 내가 원하는 것을하기 위해. 나는 루프가 결국 부모의 기능을 반복해야한다는 것을 알고있다 (놀랍게도, 일어나지 않는다).
두 번째 함수의 '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();
제휴하지 않습니다 StackOverflow