사용자 지정 클래스의 속성을 반복 할 때 methods provided by Adobe이 작동하지 않는 것처럼 보입니다. 컴파일 또는 런타임 오류가 발생하지 않습니다.클래스 속성 열거
클래스
package {
public dynamic class enum {
public var foo:Number = 123;
public function enum() {
this.setPropertyIsEnumerable("foo", true);
if (this.propertyIsEnumerable("foo") == false) {
trace("foo:" + foo + " is not enumerable.")
}
}
}
}
// outputs "foo:bar is not enumerable."
Implementaiton 나는 그냥 할 수 있도록 동적으로 클래스를 변경해야 할 때 정말 실망 그래서, 빠르고 유연한 내 코드를 유지하려고
var test:enum = new enum();
for (var property:String in test) {
trace(property);
}
// outputs nothing
속성에 for ... in
을 사용합니다. Jackson Dunstan's testing confirms that this can be 400x slower than static class properties이지만 명시 적으로 참조해야하며 (속성에 무관 한 방법에는 비실용적 임) 액세스가 가능하려면 클래스의 반영을 사용해야합니다.
전체 문제를 회피하는 유일한 방법은 동적으로 선언 된 변수를 사용하는 것입니다. 그 시점에서 setPropertyIsEnumerable (prop, true)를 사용하면 무의미한 것이므로 불필요합니다. 동적으로 생성 된 모든 속성 은 이미 열거 형입니다. 또한 동적 변수를 강하게 데이터 형식으로 지정할 수 없으며 성능이 창 밖으로 나옵니다. 예를 들어
...클래스
package {
public dynamic class enum {
public var foo:String = "apple";
public function enum(){
this.dynamicVar = "orange";
this.dynamicProp = "banana";
this.setPropertyIsEnumerable("foo", true);
this.setPropertyIsEnumerable("dynamicProp", false);
}
}
}
구현
var test:enum = new enum();
for (var key:String in test) {
trace(key + ": " + test[key]); // dynamicVar: 1
}
// outputs "dynamicVar: orange"
지금 클래스가 동적 인 것을, 우리가 볼 우리의 3 개 테스트 속성의 하나 반복되고있다. 2가 있어야합니다.
Adobe는 나쁜 프로그래밍 습관을 채택하기를 원합니다. 단어가 실패 ...
네 말이 맞아. 그 면책 조항을 글로 표현한 것처럼 보입니다. 나는 벽돌 벽에 맞서고 ... 한숨을 쉬고있다. – Atriace