addProperty(Object.addProperty 메서드)

public addProperty(name:String, getter:Function, setter:Function) : 부울

getter/setter 속성을 만듭니다. Flash에서 getter/setter 속성을 읽을 때 get 함수를 호출하고 함수의 반환값은 name 값이 됩니다. Flash에서 getter/setter 속성을 작성할 때 set 함수를 호출하고 새 값을 매개 변수로 전달합니다. 지정한 이름의 속성이 이미 있으면 새 속성이 해당 속성을 덮어씁니다.

"get" 함수는 매개 변수가 없는 함수입니다. 반환값은 어느 유형이든 가능합니다. 해당 유형은 호출에 따라 변경될 수 있습니다. 반환값이 속성의 현재 값으로 처리됩니다.

"set" 함수는 하나의 매개 변수를 받는 함수입니다. 이 매개 변수가 속성의 새 값이 됩니다. 예를 들어, 명령문 x = 1로 속성 x에 1을 대입하면 Number 유형의 매개 변수 1이 set 함수에 전달됩니다. set 함수의 반환값은 무시됩니다.

getter/setter 속성을 프로토타입 객체에 추가할 수 있습니다. 프로토타입 객체에 getter/setter 속성을 추가하면 프로토타입 객체를 상속하는 모든 객체 인스턴스는 getter/setter 속성을 상속합니다. 이렇게 하면 한 위치에서 프로토타입 객체에 getter/setter 속성을 추가하여, 프로토타입 객체에 메서드를 추가하는 것처럼 클래스의 모든 인스턴스에 getter/setter 속성을 전파할 수 있습니다. 상속되는 프로토타입 객체의 getter/setter 속성에 대해 get/set 함수가 호출되는 경우 get/set 함수에 전달되는 참조는 프로토타입 객체가 아니라 원래 참조된 객체입니다.

잘못 호출되면 Object.addProperty()가 오류와 함께 실패할 수 있습니다. 다음 표에서는 발생할 수 있는 오류를 설명합니다.

오류 조건

오류 내용

name이 유효한 속성 이름이 아닙니다. 예를 들면 빈 문자열입니다.

false를 반환하며 속성이 추가되지 않습니다.

getter가 올바른 함수 객체가 아닙니다.

false를 반환하며 속성이 추가되지 않습니다.

setter가 올바른 함수 객체가 아닙니다.

false를 반환하며 속성이 추가되지 않습니다.


지원 버전: ActionScript 1.0; Flash Lite 2.0 - ActionScript 2.0 클래스에서 이 메서드 대신 get 또는 set 메서드를 사용할 수 있습니다.

매개 변수

name:String - 문자열입니다. 만들 객체 속성의 이름입니다.

getter:Function - 속성 값을 검색하기 위해 호출하는 함수이며 이 매개 변수는 Function 객체입니다.

setter:Function - 속성의 값을 설정하기 위해 호출하는 함수이며 이 매개 변수는 Function 객체입니다. 이 매개 변수에 대해 null 값을 전달하면 속성은 읽기 전용이 됩니다.

반환값

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

예제

다음 예제에서는 한 객체에 setQuantity() 및 getQuantity()의 두 가지 내부 메서드가 있습니다. bookcount 속성은 값을 설정하거나 검색할 때 이들 메서드를 호출하는 데 사용할 수 있습니다. 세 번째 내부 메서드인 getTitle()은 bookname 속성과 연결된 읽기 전용 값을 반환합니다. 스크립트에서 myBook.bookcount의 값을 검색할 때 ActionScript 인터프리터는 자동으로 myBook.getQuantity()를 호출합니다. 스크립트가 myBook.bookcount 값을 수정하면 인터프리터는 myObject.setQuantity()를 호출합니다. bookname 속성은 set 함수를 지정하지 않으므로 bookname을 수정하려는 시도가 무시됩니다.

function Book() {
    this.setQuantity = function(numBooks:Number):Void {
    this.books = numBooks;
    };
    this.getQuantity = function():Number {
    return this.books;
    };
    this.getTitle = function():String {
    return "Catcher in the Rye";
    };
    this.addProperty("bookcount", this.getQuantity, this.setQuantity);
    this.addProperty("bookname", this.getTitle, null);
}
var myBook = new Book();
myBook.bookcount = 5;
trace("You ordered "+myBook.bookcount+" copies of "+myBook.bookname);
// 출력: You ordered 5 copies of Catcher in the Rye

위의 예제는 제대로 작동합니다. 그러나 bookcount 및 bookname 속성이 Book 객체의 모든 인스턴스에 추가되므로 객체의 모든 인스턴스에 대해 두 속성이 있어야 합니다. 클래스에 bookcount와 bookname 등의 속성이 많으면 메모리가 많이 소모될 수 있습니다. 대신 bookcount와 bookname 속성이 한 위치에만 있도록 해당 속성을 Book.prototype에 추가할 수 있습니다. 그러나 결과는 모든 인스턴스에 bookcount와 bookname을 직접 추가한 예제의 코드와 같습니다. Book 인스턴스의 두 속성 중 하나에 액세스하려고 하는 경우 해당 속성이 없으면 Book.prototype에 정의된 버전을 발견할 때까지 프로토타입 체인 위로 올라갑니다. 다음 예제에서는 Book.prototype에 속성을 추가하는 방법을 보여 줍니다.

function Book() {}
Book.prototype.setQuantity = function(numBooks:Number):Void {
    this.books = numBooks;
};
Book.prototype.getQuantity = function():Number {
    return this.books;
};
Book.prototype.getTitle = function():String {
    return "Catcher in the Rye";
};
Book.prototype.addProperty("bookcount", Book.prototype.getQuantity, Book.prototype.setQuantity);
Book.prototype.addProperty("bookname", Book.prototype.getTitle, null);
var myBook = new Book();
myBook.bookcount = 5;
trace("You ordered "+myBook.bookcount+" copies of "+myBook.bookname);

다음 예제에서는 ActionScript 2.0에서 사용할 수 있는 암시적인 getter 및 setter 함수를 사용하는 방법을 보여 줍니다. Book 함수를 정의하고 Book.prototype을 편집하는 대신, Book.as라는 외부 파일에서 Book 클래스를 정의합니다. 이 클래스 정의만 포함하고 Flash 응용 프로그램의 클래스 경로 내에 있는 Book.as라는 별개의 외부 파일에 다음 코드가 있어야 합니다.

class Book {
    var books:Number;
    function set bookcount(numBooks:Number):Void {
    this.books = numBooks;
    }
    function get bookcount():Number {
    return this.books;
    }
    function get bookname():String {
    return "Catcher in the Rye";
    }
}

그러면 다음 코드를 FLA 파일에 넣을 수 있고 해당 코드는 위의 예제에서와 똑같은 방식으로 작동합니다.

var myBook:Book = new Book(); 
myBook.bookcount = 5; 
trace("You ordered "+myBook.bookcount+" copies of "+myBook.bookname);

참고 사항

get 문, set 문