런타임 버전: | Flash Player 9, AIR 1.0, Flash Lite 4 |
new
연산자 구문을 사용하여 생성자로 객체를 만들고 객체에 동적으로 속성을 할당할 수 있습니다. 다음과 같이 객체 리터럴을 할당하여 객체를 만들 수도 있습니다.
var obj:Object = {a:"foo", b:"bar"}
명시적 기본 클래스를 선언하지 않는 모든 클래스는 내장 Object 클래스를 확장합니다.
Object 클래스를 사용하여 연결 배열을 만들 수 있습니다. 기본적으로 연결 배열은 Object 클래스의 인스턴스이며 키-값 쌍은 각각 속성과 속성 값으로 표현됩니다. 결합적 배열을 Object 데이터 유형을 사용하여 선언해야 하는 또 다른 이유는 이 경우 객체 리터럴을 사용하여 결합적 배열을 채울 수 있기 때문입니다. 단, Object 데이터 유형으로 선언하는 경우에만 가능합니다. 다음 예제에서는 객체 리터럴을 사용하여 연결 배열을 만들고 dot 연산자와 array access 연산자를 사용하여 항목에 액세스한 다음 새 속성을 만들어 키-값 쌍을 새로 추가합니다.
var myAssocArray:Object = {fname:"John", lname:"Public"}; trace(myAssocArray.fname); // John trace(myAssocArray["lname"]); // Public myAssocArray.initial = "Q"; trace(myAssocArray.initial); // Q
ActionScript 3.0에는 클래스 상속과 프로토타입 상속이라는 두 가지 상속이 있습니다.
- 클래스 상속은 기본 상속 메커니즘이며 고정된 속성의 상속을 지원합니다. 고정된 속성은 클래스 정의의 일부로 선언된 변수, 상수 또는 메서드입니다. 모든 클래스 정의는 이제 클래스에 대한 정보가 저장되는 특수 클래스 객체로 표현됩니다.
- 프로토타입 상속은 이전 버전의 ActionScript에서 유일한 상속 메커니즘이며 ActionScript 3.0에서는 대체 상속 유형으로 사용됩니다. 각 클래스에는 프로토타입 객체가 연결되고 프로토타입 객체의 속성은 클래스의 모든 인스턴스에서 공유됩니다. 작성된 클래스 인스턴스에는 해당 클래스의 프로토타입 객체에 대한 참조가 있으며, 이 참조는 인스턴스와 관련 클래스 프로토타입 객체를 연결하는 링크 역할을 합니다. 런타임에 클래스 인스턴스에서 속성을 찾지 못하면 클래스 프로토타입 객체인 대리자에서 해당 속성을 찾습니다. 프로토타입 객체에 속성이 없으면 해당 속성을 찾을 때까지 계층 구조의 다음 상위 수준에서 프로토타입 객체의 대리자를 계속 확인합니다.
다음 예제에서 알 수 있듯이 클래스 상속과 프로토타입 상속은 공존할 수 있습니다.
class A { var x = 1 prototype.px = 2 } dynamic class B extends A { var y = 3 prototype.py = 4 } var b = new B() b.x // 1 via class inheritance b.px // 2 via prototype inheritance from A.prototype b.y // 3 b.py // 4 via prototype inheritance from B.prototype B.prototype.px = 5 b.px // now 5 because B.prototype hides A.prototype b.px = 6 b.px // now 6 because b hides B.prototype
클래스 대신 함수를 사용하면 사용자 정의 프로토타입 상속 트리를 구성할 수 있습니다. 클래스를 사용하는 경우 프로토타입 상속 트리는 클래스 상속 트리를 반영합니다. 그러나 프로토타입 객체는 동적이므로 런타임에 프로토타입 기반 속성을 추가 및 삭제할 수 있습니다.
관련 API 요소
속성 | 정의 주체 | ||
---|---|---|---|
constructor : Object
지정된 객체 인스턴스의 클래스 객체 또는 생성자 함수에 대한 참조입니다. | Object | ||
prototype : Object [정적]
클래스 또는 함수 객체의 프로토타입 객체에 대한 참조입니다. | Object |
메서드 | 정의 주체 | ||
---|---|---|---|
Object()
Object 객체를 만들고 객체의 constructor 속성에 객체의 생성자 메서드에 대한 참조를 저장합니다. | Object | ||
지정된 속성이 객체에 정의되어 있는지 여부를 나타냅니다. | Object | ||
Object 클래스의 인스턴스가 매개 변수로 지정된 객체의 프로토타입 체인에 있는지 여부를 나타냅니다. | Object | ||
지정된 속성이 존재하고 열거 가능한지 여부를 나타냅니다. | Object | ||
루프 작업에서 동적 속성을 사용할 수 있는지 여부를 설정합니다. | Object | ||
로캘별 규칙에 따라 서식이 지정된 이 객체의 문자열 표현을 반환합니다. | Object | ||
지정된 객체의 문자열 표현을 반환합니다. | Object | ||
지정된 객체의 프리미티브 값을 반환합니다. | Object |
constructor | 속성 |
public var constructor:Object
런타임 버전: | Flash Player 9, Flash Lite 4, Flash Player 9, AIR 1.0 |
지정된 객체 인스턴스의 클래스 객체 또는 생성자 함수에 대한 참조입니다. 객체가 클래스의 인스턴스인 경우 constructor
속성에는 클래스 객체에 대한 참조가 저장됩니다. 생성자 함수를 사용하여 객체를 만든 경우 constructor
속성에는 생성자 함수에 대한 참조가 저장됩니다. 생성자 함수는 클래스의 생성자 메서드와 다릅니다. 생성자 함수는 객체를 만드는 데 사용되는 Function 객체이고 class
키워드를 사용하여 클래스를 정의하는 대신 사용할 수 있습니다.
class
키워드를 사용하여 클래스를 정의하는 경우 클래스의 프로토타입 객체에는 클래스 객체에 대한 참조가 저장되는 constructor
라는 속성이 할당됩니다. 클래스의 인스턴스는 프로토타입 객체에서 이 속성을 상속합니다. 예를 들어 다음 코드에서는 A
라는 새 클래스와 myA
라는 클래스 인스턴스를 만듭니다.
dynamic class A {} trace(A.prototype.constructor); // [class A] trace(A.prototype.constructor == A); // true var myA:A = new A(); trace(myA.constructor == A); // true
고급 사용자는 class
키워드 대신 function
키워드를 사용하여 객체를 만드는 템플릿으로 사용할 수 있는 Function 객체를 정의할 수도 있습니다. 이러한 함수는 new
연산자와 함께 객체를 만드는 데 사용할 수 있으므로 생성자 함수라고 합니다. function
키워드를 사용하여 생성자 함수를 만들면 해당 프로토타입 객체에 생성자 함수에 대한 참조가 저장되는 constructor
라는 속성이 할당됩니다. 생성자 함수를 사용하여 만든 객체는 생성자 함수의 프로토타입 객체에서 constructor
속성을 상속합니다. 예를 들어 다음 코드에서는 f
라는 새 생성자 함수와 myF
라는 객체를 만듭니다.
function f() {} trace(f.prototype.constructor); // function Function() {} trace(f.prototype.constructor == f); // true var myF = new f(); trace(myF.constructor == f); // true
참고: constructor
속성은 쓰기 가능합니다. 즉, 사용자 코드에서 할당 명령문을 사용하여 값을 변경할 수 있습니다. constructor
속성의 값은 변경하지 않는 것이 좋으며 constructor
속성 값에 의존하는 코드를 작성하는 경우에는 이 값이 재설정되지 않도록 주의해야 합니다. 이 값은 className.prototype.constructor
와 같이 프로토타입 객체를 통해 속성에 액세스한 경우에만 변경할 수 있습니다.
constructor
속성에 액세스하여 엄격 모드에서 컴파일하는 경우 constructor 속성이 런타임 엔터티인 프로토타입 객체에 따라 달라지므로 컴파일 타임에 오류가 발생합니다. 표준 모드를 사용하거나 클래스 설명에 "dynamic"이 지정된 경우 오류를 생성하지 않고 코드가 실행됩니다.
관련 API 요소
prototype | 속성 |
public static var prototype:Object
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 9, AIR 1.0, Flash Lite 4 |
클래스 또는 함수 객체의 프로토타입 객체에 대한 참조입니다. 사용자가 만드는 모든 클래스 또는 함수 객체에는 prototype
속성이 자동으로 작성되어 연결됩니다. 이 속성은 사용자가 만드는 클래스 또는 함수에 고유하므로 정적 속성입니다. 예를 들어 클래스를 만드는 경우 prototype
속성의 값은 클래스의 모든 인스턴스에서 공유되며 클래스 속성으로만 액세스할 수 있습니다. 클래스의 인스턴스에서 prototype
속성에 직접 액세스할 수는 없습니다.
클래스의 프로토타입 객체는 해당 클래스의 특수 인스턴스로서 클래스의 모든 인스턴스 사이에서 상태를 공유할 수 있는 메커니즘을 제공합니다. 런타임에 클래스 인스턴스에서 속성을 찾지 못하면 클래스 프로토타입 객체인 대리자에서 해당 속성을 찾습니다. 프로토타입 객체에 속성이 없으면 해당 속성을 찾을 때까지 계층 구조의 다음 상위 수준에서 프로토타입 객체의 대리자를 계속 확인합니다.
참고: ActionScript 3.0의 경우 프로토타입 상속은 기본 상속 메커니즘이 아닙니다. ActionScript 3.0의 기본 상속 메커니즘은 클래스 정의에 있는 고정된 속성을 상속하는 클래스 상속입니다.
Object | () | 생성자 |
public function Object()
런타임 버전: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Object 객체를 만들고 객체의 constructor
속성에 객체의 생성자 메서드에 대한 참조를 저장합니다.
hasOwnProperty | () | 메서드 |
AS3 function hasOwnProperty(name:String):Boolean
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 9, AIR 1.0, Flash Lite 4 |
지정된 속성이 객체에 정의되어 있는지 여부를 나타냅니다. 이 메서드는 대상 객체에 name
매개 변수로 지정된 문자열과 일치하는 속성이 있으면 true
를, 그렇지 않으면 false
를 반환합니다. 객체가 클래스의 인스턴스인 경우 다음 유형의 속성이 있으면 이 메서드에서 true
를 반환하며, 클래스 객체의 경우는 이와 다릅니다.
- 고정된 인스턴스 속성-객체의 클래스에 정의된 정적이지 않은 변수, 상수 또는 메서드
- 상속된 고정 인스턴스 속성-객체의 클래스를 통해 상속된 변수, 상수 또는 메서드
- 동적 속성-인스턴스화 이후 클래스 정의 외부에서 객체에 추가된 속성. 동적 속성을 추가하려면 객체의 정의 클래스를
dynamic
키워드를 사용하여 선언해야 합니다.
객체가 클래스의 인스턴스인 경우 다음 유형의 속성이 있더라도 이 메서드에서 false
를 반환합니다.
- 정적 속성-객체의 정의 클래스 또는 수퍼 클래스 중 하나에서 static 키워드를 사용하여 정의된 변수, 상수 또는 메서드
- 프로토타입 속성-객체의 프로토타입 체인의 일부인 프로토타입 객체에 정의된 속성. ActionScript 3.0에서 프로토타입 체인은 클래스 상속에 사용되지 않지만 대체 상속 유형으로 유지되고 있습니다. 예를 들어 Array 클래스의 인스턴스에서는 Array 클래스에 대한 프로토타입 체인의 일부인
Object.prototype
에 있는valueOf()
메서드에 액세스할 수 있습니다. Array의 인스턴스에valueOf()
를 사용할 수는 있지만 인스턴스에 대한hasOwnProperty("valueOf")
의 반환 값은false
입니다.
또한 ActionScript 3.0에는 클래스 정의를 직접 표현한 클래스 객체가 있습니다. 클래스 객체에 hasOwnProperty()
메서드를 호출하면 속성이 해당 클래스 객체에 정의된 정적 속성인 경우에만 true
가 반환됩니다. 예를 들어 Array의 하위 클래스인 CustomArray를 만들고 CustomArray에 foo
라는 정적 속성을 정의한 경우 CustomArray.hasOwnProperty("foo")
를 호출하면 true
가 반환됩니다. 그러나 Array 클래스에 정의된 정적 속성 DESCENDING
의 경우 CustomArray.hasOwnProperty("DESCENDING")
을 호출하면 false
가 반환됩니다.
참고: Object 클래스의 메서드는 Object의 프로토타입에 동적으로 만들어집니다. Object의 하위 클래스에서 이 메서드를 다시 정의할 때 override
키워드를 사용하지 마십시오. 예를 들어 Object의 하위 클래스에서는 기본 클래스에 대한 재정의를 사용하는 대신 function hasOwnProperty():Boolean
을 구현합니다.
매개 변수
name:String — 객체의 속성입니다.
|
Boolean — 대상 객체에 name 매개 변수로 지정된 속성이 있으면 true 이고, 그렇지 않으면 false 입니다.
|
isPrototypeOf | () | 메서드 |
AS3 function isPrototypeOf(theClass:Object):Boolean
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Object 클래스의 인스턴스가 매개 변수로 지정된 객체의 프로토타입 체인에 있는지 여부를 나타냅니다. 이 메서드는 객체가 theClass
매개 변수로 지정된 객체의 프로토타입 체인에 있으면 true
를 반환합니다. 대상 객체가 theClass
객체의 프로토타입 체인에 없거나 theClass
매개 변수가 객체가 아닌 경우 이 메서드는 false
를 반환합니다.
참고: Object 클래스의 메서드는 Object의 프로토타입에 동적으로 만들어집니다. Object의 하위 클래스에서 이 메서드를 다시 정의할 때 override
키워드를 사용하지 마십시오. 예를 들어 Object의 하위 클래스에서는 기본 클래스에 대한 재정의를 사용하는 대신 function isPrototypeOf():Boolean
을 구현합니다.
매개 변수
theClass:Object — 지정된 객체에서 참조할 수 있는 클래스입니다.
|
Boolean — 객체가 theClass 매개 변수로 지정된 객체의 프로토타입 체인에 있으면 true 이고, 그렇지 않으면 false 입니다.
|
propertyIsEnumerable | () | 메서드 |
AS3 function propertyIsEnumerable(name:String):Boolean
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 9, AIR 1.0, Flash Lite 4 |
지정된 속성이 존재하고 열거 가능한지 여부를 나타냅니다. true
이면 속성이 존재하고 for..in
루프에서 열거할 수 있습니다. 이 메서드는 대상 객체의 프로토타입 체인을 검사하지 않으므로 속성이 대상 객체에 반드시 존재해야 합니다.
사용자가 만든 속성은 열거할 수 있지만 내장 속성은 일반적으로 열거할 수 없습니다.
참고: Object 클래스의 메서드는 Object의 프로토타입에 동적으로 만들어집니다. Object의 하위 클래스에서 이 메서드를 다시 정의할 때 override
키워드를 사용하지 마십시오. 예를 들어 Object의 하위 클래스에서는 기본 클래스에 대한 재정의를 사용하는 대신 function propertyIsEnumerable():Boolean
을 구현합니다.
매개 변수
name:String — 객체의 속성입니다.
|
Boolean — name 매개 변수로 지정된 속성을 열거할 수 있으면 true 이고, 그렇지 않으면 false 입니다.
|
setPropertyIsEnumerable | () | 메서드 |
public function setPropertyIsEnumerable(name:String, isEnum:Boolean = true):void
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 9, AIR 1.0, Flash Lite 4 |
루프 작업에서 동적 속성을 사용할 수 있는지 여부를 설정합니다. 이 메서드는 대상 객체의 프로토타입 체인을 검사하지 않으므로 속성이 대상 객체에 반드시 존재해야 합니다.
매개 변수
name:String — 객체의 속성입니다.
| |
isEnum:Boolean (default = true ) — false 로 설정되어 있으면 동적 속성이 for..in 루프에 표시되지 않고 propertyIsEnumerable() 메서드는 false 를 반환합니다.
|
관련 API 요소
toLocaleString | () | 메서드 |
public function toLocaleString():String
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 9, AIR 1.0, Flash Lite 4 |
로캘별 규칙에 따라 서식이 지정된 이 객체의 문자열 표현을 반환합니다.
이 메서드의 기본 구현은 로캘별 서식 지정을 수행하지 않고 toString()
과 동일한 문자열을 반환합니다. 필요한 경우 하위 클래스는 자체 로캘 인식 구현을 제공해야 합니다.
참고: Object 클래스의 메서드는 Object의 프로토타입에 동적으로 만들어집니다. Object의 하위 클래스에서 이 메서드를 다시 정의할 때 override
키워드를 사용하지 마십시오. 예를 들어 Object의 하위 클래스에서는 기본 클래스에 대한 재정의를 사용하는 대신 function toLocaleString():String
을 구현합니다.
String — 로컬 규칙에 따라 서식이 지정된 이 객체의 문자열 표현입니다.
|
관련 API 요소
toString | () | 메서드 |
public function toString():String
런타임 버전: | Flash Player 9, AIR 1.0, Flash Lite 4 |
지정된 객체의 문자열 표현을 반환합니다.
참고: Object 클래스의 메서드는 Object의 프로토타입에 동적으로 만들어집니다. Object의 하위 클래스에서 이 메서드를 다시 정의할 때 override
키워드를 사용하지 마십시오. 예를 들어 Object의 하위 클래스에서는 기본 클래스에 대한 재정의를 사용하는 대신 function toString():String
을 구현합니다.
String — 객체의 문자열 표현입니다.
|
valueOf | () | 메서드 |
public function valueOf():Object
런타임 버전: | Flash Player 9, AIR 1.0, Flash Lite 4 |
지정된 객체의 프리미티브 값을 반환합니다. 이 객체에 프리미티브 값이 없으면 객체 자체가 반환됩니다.
참고: Object 클래스의 메서드는 Object의 프로토타입에 동적으로 만들어집니다. Object의 하위 클래스에서 이 메서드를 다시 정의할 때 override
키워드를 사용하지 마십시오. 예를 들어 Object의 하위 클래스에서는 기본 클래스에 대한 재정의를 사용하는 대신 function valueOf():Object
를 구현합니다.
Object — 이 객체의 프리미티브 값 또는 객체 자체입니다.
|
관련 API 요소
ObjectExample
및 Circle
클래스를 사용하여 Object 클래스의 동적 특징을 보여 주고, 값 객체를 Shape 객체로 변환한 다음 스테이지의 지정된 x/y 좌표에 추가하는 방법을 보여 줍니다.
이 예제에서는 값 객체인 firstInitObj
및 secondInitObj
를 만듭니다. 사용자 정의 클래스 Circle
은 값 객체를 받아 루프 구문을 통해 값 객체에 정의되어 있는 속성과 일치하는 내부 속성을 설정합니다.
package { import flash.display.Sprite; public class ObjectExample extends Sprite { public function ObjectExample() { var firstInitObj:Object = new Object(); firstInitObj.bgColor = 0xFF0000; firstInitObj.radius = 25; firstInitObj.xCenter = 25; firstInitObj.yCenter = 25; var firstCircle:Circle = new Circle(firstInitObj); addChild(firstCircle); firstCircle.x = 50; firstCircle.y = 50; var secondInitObj:Object = {bgColor:0xCCCCCC, radius:50, xCenter:50, yCenter:50}; var secondCircle:Circle = new Circle(secondInitObj); addChild(secondCircle); secondCircle.x = 100; secondCircle.y = 100; } } } import flash.display.Shape; class Circle extends Shape { public var bgColor:Number = 0xFFFFFF; public var radius:Number = 0; public var xCenter:Number = 0; public var yCenter:Number = 0; public function Circle(initObj:Object) { for(var i:String in initObj) { this[i] = initObj[i]; } draw(); } public function draw():void { graphics.beginFill(bgColor); graphics.drawCircle(xCenter, yCenter, radius); graphics.endFill(); } }
Tue Jun 12 2018, 03:17 PM Z