User Guide

Object.addProperty() 379
The previous example works, but the properties bookcount and bookname are added to every
instance of the
Book object, which requires having two properties for every instance of the object.
If there are many properties, such as
bookcount and bookname, in a class, they could consume a
great deal of memory. Instead, you can add the properties to
Book.prototype so that the
bookcount and bookname properties exist only in one place. The effect, however, is the same as
that of the code in the example that added
bookcount and bookname directly to every instance. If
an attempt is made to access either property in a Book instance, the property’s absence will cause
the prototype chain to be ascended until the versions defined in
Book.prototype are
encountered. The following example shows how to add the properties to
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);
The following example shows how to use the implicit getter and setter functions available in
ActionScript 2.0. For more information, see “Implicit getter/setter methods” on page 63. Rather
than defining the
Book function and editing Book.prototype, you define the Book class in an
external file named Book.as. For more information, see “Creating and using classes” on page 51.
The following code must be in a separate external file named Book.as that contains only this class
definition and resides within the Flash applications classpath:
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";
}
}
The following code can then be placed in a FLA file and will function the same way as it does in
the previous examples:
var myBook:Book = new Book();
myBook.bookcount = 5;
trace("You ordered "+myBook.bookcount+" copies of "+myBook.bookname);