| Player 버전 : | Flash Player 9 |
Proxy 클래스를 사용하면 객체에서 속성 검색 및 수정 등의 ActionScript 비헤이비어 기본 동작을 재정의할 수 있습니다.
Proxy 클래스에는 생성자가 없으며 Proxy를 인스턴스화해서는 안 됩니다. 대신 Proxy 클래스를 하위 클래스화하는 방법으로 getProperty 등의 메서드를 재정의하여 사용자 정의 비헤이비어를 제공해야 합니다. Proxy 클래스의 메서드를 재정의하지 않고 메서드를 사용하려고 하면 예외가 발생합니다.
또한 Proxy 클래스의 메서드를 재정의하는 사용자 정의 코드에서 예기치 않은 예외가 발생할 수도 있습니다. 이러한 메서드를 사용할 때 예외가 발생하면 in, is, delete 등의 연산자를 사용하는 호출 코드에서 예외를 예측할 수 없으므로 문제가 발생합니다. 재정의하는 메서드에서 예외가 발생하지 않는다고 확신할 수 없는 경우 Proxy 클래스를 구현하는 코드 주위에 try..catch 문을 사용하여 연산자를 통해 메서드가 호출될 때 치명적인 오류가 발생하지 않도록 하는 것이 좋습니다. 예를 들면 다음과 같습니다.
dynamic class MyProxy extends Proxy {
flash_proxy override function callProperty(name:*, ...rest):* {
try {
// custom code here
}
catch (e:Error) {
// respond to error here
}
}
Proxy 클래스는 ActionScript 2.0의 Object.__resolve 및 Object.addProperty 기능 대신 사용되며, 이러한 기능은 ActionScript 3.0에서 더 이상 사용되지 않습니다. ActionScript 2.0에서는 Object.addProperty() 기능을 사용하여 get 및 set 메서드를 동적으로 만들 수 있었습니다. ActionScript 3.0에서도 컴파일 타임에 get 및 set 메서드를 제공하지만 Proxy 클래스를 사용하지 않으면 이러한 메서드를 객체에 동적으로 할당할 수 없습니다.
public 네임스페이스와의 충돌을 피하기 위해 Proxy 클래스의 메서드는 flash_proxy 네임스페이스에 있습니다.
Proxy 클래스의 메서드에 name 인수를 사용하는 경우 name은 String 객체나 QName 객체(네임스페이스를 사용하는 경우)가 될 수 있습니다.
예제를 통해 확인하십시오.
flash_proxy function callProperty(name:*, ... rest):*
| Player 버전 : | Flash Player 9 |
함수로 호출할 수 있는 객체 속성 비헤이비어를 재정의합니다. 객체의 메서드를 호출하면 이 메서드가 호출됩니다. 객체를 함수로 호출할 수도 있고 객체 속성을 함수로 호출할 수도 있습니다.
매개 변수
| name:* — 호출할 메서드의 이름입니다.
|
| |
| ... rest — 호출되는 메서드에 대한 인수를 지정하는 배열입니다.
|
반환값
참고 사항
flash_proxy function deleteProperty(name:*):Boolean
| Player 버전 : | Flash Player 9 |
속성을 삭제하는 요청을 재정의합니다. delete 연산자로 속성을 삭제하면 삭제를 수행하기 위해 이 메서드가 호출됩니다.
매개 변수
반환값
| Boolean — 속성을 삭제했으면 true이고 그렇지 않으면 false입니다.
|
참고 사항
flash_proxy function getDescendants(name:*):*
| Player 버전 : | Flash Player 9 |
descendant 연산자 사용을 재정의합니다. descendant 연산자를 사용하면 이 메서드가 호출됩니다.
매개 변수
| name:* — 객체에서 내려가며 검색할 속성의 이름입니다.
|
반환값
| * — descendant 연산자의 결과입니다.
|
참고 사항
flash_proxy function getProperty(name:*):*
| Player 버전 : | Flash Player 9 |
속성 값에 대한 요청을 재정의합니다. 속성을 찾을 수 없으면 이 메서드에서 undefined를 반환합니다. 이 비헤이비어에 대한 자세한 내용은 ECMA-262 언어 사양 3rd Edition의 8.6.2.1 단원을 참조하십시오.
매개 변수
반환값
| * — 지정된 속성입니다. 속성을 찾을 수 없으면 undefined입니다.
|
참고 사항
flash_proxy function hasProperty(name:*):Boolean
| Player 버전 : | Flash Player 9 |
객체에 특정 속성이 있는지 이름별로 확인하는 요청을 재정의합니다.
매개 변수
반환값
| Boolean — 속성이 있으면 true이고 그렇지 않으면 false입니다.
|
참고 사항
flash_proxy function isAttribute(name:*):Boolean
| Player 버전 : | Flash Player 9 |
제공한 QName이 특성으로도 표시되어 있는지 여부를 확인합니다.
매개 변수
반환값
| Boolean — name의 인수가 특성으로도 표시된 QName인 경우 true를 반환합니다.
|
참고 사항
flash_proxy function nextName(index:int):String
| Player 버전 : | Flash Player 9 |
프록시 사용 객체의 속성을 인덱스 번호별로 열거하여 속성 이름을 검색할 수 있습니다. 그러나 Proxy 클래스 자체의 속성은 열거할 수 없습니다. 이 함수를 통해 객체에 대한 for...in 및 for each..in 루프를 구현하여 원하는 이름을 검색할 수 있습니다.
Proxy.nextNameIndex() 코드 예제:
protected var _item:Array; // array of object's properties
override flash_proxy function nextNameIndex (index:int):int {
// initial call
if (index == 0) {
_item = new Array();
for (var x:* in _target) {
_item.push(x);
}
}
if (index < _item.length) {
return index + 1;
} else {
return 0;
}
}
override flash_proxy function nextName(index:int):String {
return _item[index - 1];
}
매개 변수
| index:int — 객체 속성의 인덱스 값(0부터 시작)입니다.
|
반환값
참고 사항
flash_proxy function nextNameIndex(index:int):int
| Player 버전 : | Flash Player 9 |
프록시 사용 객체의 속성을 인덱스 번호별로 열거할 수 있습니다. 그러나 Proxy 클래스 자체의 속성은 열거할 수 없습니다. 이 함수를 통해 객체에 대한 for...in 및 for each..in 루프를 구현하여 속성 인덱스 값을 검색할 수 있습니다.
예를 들면 다음과 같습니다.
protected var _item:Array; // array of object's properties
override flash_proxy function nextNameIndex (index:int):int {
// initial call
if (index == 0) {
_item = new Array();
for (var x:* in _target) {
_item.push(x);
}
}
if (index < _item.length) {
return index + 1;
} else {
return 0;
}
}
override flash_proxy function nextName(index:int):String {
return _item[index - 1];
}
매개 변수
| index:int — 열거가 시작되는 위치의 인덱스 값(0부터 시작)입니다.
|
반환값
참고 사항
flash_proxy function nextValue(index:int):*
| Player 버전 : | Flash Player 9 |
프록시 사용 객체의 속성을 인덱스 번호별로 열거하여 속성 값을 검색할 수 있습니다. 그러나 Proxy 클래스 자체의 속성은 열거할 수 없습니다. 이 함수를 통해 객체에 대한 for...in 및 for each..in 루프를 구현하여 원하는 값을 검색할 수 있습니다.
Proxy.nextNameIndex() 코드 예제:
protected var _item:Array; // array of object's properties
override flash_proxy function nextNameIndex (index:int):int {
// initial call
if (index == 0) {
_item = new Array();
for (var x:* in _target) {
_item.push(x);
}
}
if (index < _item.length) {
return index + 1;
} else {
return 0;
}
}
override flash_proxy function nextName(index:int):String {
return _item[index - 1];
}
매개 변수
| index:int — 객체 속성의 인덱스 값(0부터 시작)입니다.
|
반환값
참고 사항
flash_proxy function setProperty(name:*, value:*):void
| Player 버전 : | Flash Player 9 |
속성 값을 변경하는 호출을 재정의합니다. 속성을 찾을 수 없으면 지정된 이름과 값을 사용하여 속성을 만듭니다.
매개 변수
| name:* — 수정할 속성의 이름입니다.
|
| |
| value:* — 속성을 설정하는 데 사용할 값입니다.
|
참고 사항
package {
import flash.display.Sprite;
public class ProxyExample extends Sprite {
public function ProxyExample() {
var arr:ProxyArray = new ProxyArray();
arr.push(1);
arr.push(-2);
arr.push(3);
arr.push(4);
arr.push("five");
trace(arr.length); // 5
trace(arr[0]); // 1
trace(arr[1]); // -2
trace(arr[2]); // 3
trace(arr[3]); // 4
trace(arr.sum()); // 6
arr.clear();
trace(arr); // (empty string)
arr[0] = "zero";
trace(arr); // zero
}
}
}
import flash.utils.Proxy;
import flash.utils.flash_proxy;
dynamic class ProxyArray extends Proxy {
private var _item:Array;
public function ProxyArray() {
_item = new Array();
}
override flash_proxy function callProperty(methodName:*, ... args):* {
var res:*;
switch (methodName.toString()) {
case 'clear':
_item = new Array();
break;
case 'sum':
var sum:Number = 0;
for each (var i:* in _item) {
// ignore non-numeric values
if (!isNaN(i)) {
sum += i;
}
}
res = sum;
break;
default:
res = _item[methodName].apply(_item, args);
break;
}
return res;
}
override flash_proxy function getProperty(name:*):* {
return _item[name];
}
override flash_proxy function setProperty(name:*, value:*):void {
_item[name] = value;
}
}
© 2004-2007 Adobe Systems Incorporated. All rights reserved.
Tue Oct 16 2007, 12:25 AM GMT-07:00
현재 페이지: http://livedocs.adobe.com/flash/9.0_kr/ActionScriptLangRefV3/flash/utils/Proxy.html