보통 객체의 클래스를 체크하기 위해선
아래와 같이 합니다.
is 연산자가 참 편하죠.
타이핑도 쉽고 길이도 짧고 ㅎㅎ
자 그럼 문제!!
만약 Sprite 인스턴스와 MovieClip 인스턴스가 있다고 예를 들어봅시다.
이 상황에서 여러분은 Sprite만 검출해 낼 수 있습니까?
아마 아래와 같은 코드를 떠올릴지도 모릅니다.
하지만 안타깝게도 결과는 둘 다 true 입니다.
"is" 비교 연산자는 상위 클래스까지 검사해주기 때문이죠.
MovieClip은 Sprite의 하위 클래스이기 때문에 MovieClip is Sprite 는 true가 되버리는것이죠.
그러면 진짜 딱 내 클래스만 체크하기 위해선 어떻게 해야할까요?
우리 센스쟁이 선배님들께서는 이미 그런것을 알고 계셨던가 봅니다.
하지만 남용하지는 말라는 듯이 숨겨놓았습니다.
바로 Object.constructor 속성입니다.
Object.constructor는 이름에서 알 수 있듯이 생성자를 참조하는 속성입니다.
객체에서 생성자를 참조 할 수 있도록 해주는 것이지요.
이것을 활용하면 재밌는것들을 많이 할 수 있습니다.
하지만 이 속성은 하위 클래스로 내려가면서 접근할 수 없도록 되어 있습니다.
무슨 이야기냐면
이렇게 접근하면 무사히 잘 나타나지만
이와 같이 다른 하위 클래스들한테서는 접근할 수 없게 되어 있습니다.
없는 속성에 접근할때 발생하는 1119 Error 가 발생하는군요.
하지만 저 속성은 "함부로" 접근할 수 없게 되어 있는것이지
절대로 접근하지 못하는것은 아닙니다.
바로 Object형으로 type-casting 을 시킨후 접근하면 된다 이말이죠~!!
Object( obj )로 type-casting을 하니까 잘만되는군요!!
그렇다면 위에서 풀지 못한 문제를 풀어봅시다.
오옷!!
Sprite 객체만 잡아냈습니다!!
생성자를 직접 끄집어내서 비교하기 때문에 내가 원하는 특정한 클래스로 딱 꼬집어서 검사할 수 있는 것이죠.
유틸 클래스를 하나 만들어놓고 위 함수를 만들어서 쓰면 앞으로 참 편리하겠죠?
말해주고 싶은게 있으신분은 참지말고 리플로 꼭 달아주세요. (사진 제목 : "말해주고 싶다..." )
아래와 같이 합니다.
|
is 연산자가 참 편하죠.
타이핑도 쉽고 길이도 짧고 ㅎㅎ
자 그럼 문제!!
만약 Sprite 인스턴스와 MovieClip 인스턴스가 있다고 예를 들어봅시다.
이 상황에서 여러분은 Sprite만 검출해 낼 수 있습니까?
아마 아래와 같은 코드를 떠올릴지도 모릅니다.
|
하지만 안타깝게도 결과는 둘 다 true 입니다.
"is" 비교 연산자는 상위 클래스까지 검사해주기 때문이죠.
MovieClip은 Sprite의 하위 클래스이기 때문에 MovieClip is Sprite 는 true가 되버리는것이죠.
그러면 진짜 딱 내 클래스만 체크하기 위해선 어떻게 해야할까요?
우리 센스쟁이 선배님들께서는 이미 그런것을 알고 계셨던가 봅니다.
하지만 남용하지는 말라는 듯이 숨겨놓았습니다.
바로 Object.constructor 속성입니다.
Object.constructor는 이름에서 알 수 있듯이 생성자를 참조하는 속성입니다.
객체에서 생성자를 참조 할 수 있도록 해주는 것이지요.
이것을 활용하면 재밌는것들을 많이 할 수 있습니다.
하지만 이 속성은 하위 클래스로 내려가면서 접근할 수 없도록 되어 있습니다.
무슨 이야기냐면
|
이렇게 접근하면 무사히 잘 나타나지만
|
이와 같이 다른 하위 클래스들한테서는 접근할 수 없게 되어 있습니다.
없는 속성에 접근할때 발생하는 1119 Error 가 발생하는군요.
하지만 저 속성은 "함부로" 접근할 수 없게 되어 있는것이지
절대로 접근하지 못하는것은 아닙니다.
바로 Object형으로 type-casting 을 시킨후 접근하면 된다 이말이죠~!!
|
Object( obj )로 type-casting을 하니까 잘만되는군요!!
그렇다면 위에서 풀지 못한 문제를 풀어봅시다.
|
오옷!!
Sprite 객체만 잡아냈습니다!!
생성자를 직접 끄집어내서 비교하기 때문에 내가 원하는 특정한 클래스로 딱 꼬집어서 검사할 수 있는 것이죠.
|
유틸 클래스를 하나 만들어놓고 위 함수를 만들어서 쓰면 앞으로 참 편리하겠죠?
말해주고 싶은게 있으신분은 참지말고 리플로 꼭 달아주세요. (사진 제목 : "말해주고 싶다..." )
'ActionScript 3.0 > 팁 & 노하우' 카테고리의 다른 글
[AS3] 최적화 코드 (9) | 2008.09.08 |
---|---|
[AS3] 몇 초 후에 메소드 실행하기 (23) | 2008.09.01 |
[AS3] 이쁜 for문 (21) | 2008.08.22 |
[AS3] Flash에서 Javascript 변수 가져오기 (without Javascript) (18) | 2008.08.19 |
[AS3] int, uint, Number 표현의 한계 (6) | 2008.06.02 |