180bpm
as, is, 캐스팅 + instanceof 본문
4줄요약
is는 표현식을 비교, true or false
as는 데이터 유형을 비교, exp1 or null is랑 비슷하지만 return값이 다름.
타입 캐스팅은 파라메터로 들어간 값을 해당 클래스로 변환 시켜서 return. 성공 or 컴파일 에러?
instanceof는 프로토타입 체인을 비교. true or false. 부정확함. is를 추천
is 연산자
http://help.adobe.com/ko_KR/FlashPlatform/reference/actionscript/3/operators.html#is
expression1 is expression2
첫번째 표현식이 두번째 표현식에 속한것인지
객체가 특정 데이터 유형의 멤버인지 확인한다.
상속받은 클래스까지도 검사를 한다.
var mySprite:Sprite = new Sprite();
trace(mySprite is Sprite); // true
trace(mySprite is DisplayObject); // true
trace(mySprite is IEventDispatcher); // true
return값은 true or false
*********************************************************
as 연산자
http://help.adobe.com/ko_KR/FlashPlatform/reference/actionscript/3/operators.html#as
expression as datatype
첫번째 표현식이 두번째 연산자로 지정된 데이터 유형의 멤버인지.
와일드카드형은 쓸 수 없다.
두 번째 피연산자에 사용된 표현식은 데이터 유형으로 평가되어야 함
리턴값은 expression or null
public var myArray:Array = ["one", "two", "three"];
trace(myArray as Array); // one,two,three
trace(myArray as Number); // null
trace(myArray as int); // null
*********************************************************
instanceof 연산자
expression instanceof function
http://help.adobe.com/ko_KR/FlashPlatform/reference/actionscript/3/operators.html#instanceof
첫번째 표현식의 프로토타입 체인에 functon에 대한 프로토타입 객체가 포함되어있는지
instanceof에서는 인터페이스를 포함시키지 않기 때문에 항상 false를 반환.
다만, 인터페이스를 모두 구현한 클래스를 연산한다면 true가 반환됨.
var mySprite:Sprite = new Sprite();
trace(mySprite instanceof Sprite); // true
trace(mySprite instanceof DisplayObject); // true
trace(mySprite instanceof IBitmapDrawable); // false
trace(mySprite is IBitmapDrawable); // true
*********************************************************
타입 캐스팅 - 명시적 변환
var foo:SomeClass = SomeClass(someObject); //인스턴스가 생성되지 않음. 타입 캐스팅만
var bar:SomeClass = new SomeClass(someObject); //someObject를 인자로 넘기면서 새로운 인스턴스를 생성한다.
생성자가 파라메터를 가지는 경우에는 에러가 날 수 있다.