watch(Object.watch 메서드)

public watch(name:String, callback:Function, [userData:Object]) : 부울

ActionScript 객체의 지정된 속성이 변경될 때 호출될 이벤트 핸들러를 등록합니다. 속성이 변경되면 이벤트 핸들러는 포함 객체로 myObject와 함께 호출됩니다.

callback 메서드 정의에 return 문을 사용하여 감시하고 있는 속성 값에 영향을 줄 수 있습니다. callback 메서드에 의해 반환되는 값은 감시된 객체 속성에 할당됩니다. 속성을 모니터링할지, 수정할지 또는 변경하지 못하게 할지에 따라 반환하는 값이 다릅니다.

정의하는 callback 메서드에 return 문이 없는 경우 감시하는 객체 속성에 undefined 값이 할당됩니다.

감시점은 수정된 newval 또는 oldval을 반환하여 할당된 값을 필터링하거나 무효화할 수 있습니다. 감시점이 설정된 속성을 삭제해도 해당 감시점은 없어지지 않습니다. 나중에 속성을 다시 만들 경우 해당 감시점은 여전히 유효합니다. 감시점을 제거하려면 Object.unwatch 메서드를 사용합니다.

단일 감시점만 속성에 등록될 수 있습니다. 같은 속성에 대해 이후에 Object.watch()를 호출하면 원래 감시점이 바뀝니다.

Object.watch() 메서드는 JavaScript 1.2 이상의 Object.watch() 함수와 비슷하게 동작합니다. 주요 차이점은 userData 매개 변수입니다. 이 매개 변수는 Netscape Navigator에서 지원하지 않는 Object.watch()의 Flash 추가 사항입니다. userData 매개 변수를 이벤트 핸들러로 전달하고 이벤트 핸들러에서 이 매개 변수를 사용할 수 있습니다.

Object.watch() 메서드는 getter/setter 속성을 감시할 수 없습니다. getter/setter 속성은 지연 평가를 통해 작동합니다. 속성 값은 속성이 실제로 쿼리될 때까지 결정되지 않습니다. 속성은 계속 업데이트되지 않기 때문에 대개 "지연 평가"가 효율적입니다. 속성은 필요할 때 평가됩니다. 그러나 Object.watch()는 callback 함수를 호출할지 여부를 결정하기 위해 속성을 평가해야 합니다. getter/setter 속성으로 작업하려면 Object.watch()가 속성을 계속 평가해야 하는데, 이것은 비효율적입니다.

일반적으로 _x, _y, _width, _height 등의 미리 정의된 ActionScript 속성은 getter/setter 속성이므로 Object.watch()로 감시할 수 없습니다.

지원 버전: ActionScript 1.0, Flash Lite 2.0

매개 변수

name:String - 문자열입니다. 감시할 객체 속성의 이름입니다.

callback:Function - 감시하는 속성이 변경될 때 호출할 함수입니다. 이 매개 변수는 문자열로 된 함수 이름이 아니라 함수 객체입니다. callback의 형식은 callback(prop, oldVal, newVal, userData)입니다.

userData:Object [선택 사항] - callback 메서드에 전달되는 임의의 ActionScript 데이터 조각입니다. userData 매개 변수가 생략된 경우 undefined가 콜백 메서드에 전달됩니다.

반환값

Boolean - 부울 값입니다. 감시점이 성공적으로 만들어지면 true이고, 그렇지 않으면 false입니다.

예제

다음은 watch()를 사용하여 speed 속성이 속도 한계를 초과하는지 검사하는 예제입니다.

// 새 객체를 만듭니다.
var myObject:Object = new Object();

// 속도를 추적하는 속성을 추가합니다.
myObject.speed = 0;

// speed 속성이 변경될 경우 실행할 콜백 함수를 작성합니다.
var speedWatcher:Function = function(prop, oldVal, newVal, speedLimit) {
    // 속도가 한계를 초과하는지 여부를 검사합니다.
    if (newVal > speedLimit) {
    trace ("You are speeding.");
    }
    else {
    trace ("You are not speeding.");
    }
    
    // newVal의 값을 반환합니다.
    return newVal;
}
// watch()를 사용하여 이벤트 핸들러를 등록하고 매개 변수로 전달합니다.
// - 감시할 속성의 이름: "speed"
// - 콜백 함수 speedWatcher에 대한 참조
// - userData 매개 변수인 speedLimit 55
myObject.watch("speed", speedWatcher, 55);

// speed 속성을 54로 설정하고 다시 57로 설정합니다.
myObject.speed = 54; // 출력: You are not speeding
myObject.speed = 57; // 출력: You are speeding

// 객체의 감시를 해제합니다.
myObject.unwatch("speed");
myObject.speed = 54; // 출력되는 내용이 없습니다.

참고 사항

addProperty(Object.addProperty 메서드), unwatch(Object.unwatch 메서드)