EasyManua.ls Logo

MACROMEDIA FLASH MX 2004 - ACTIONSCRIPT - Page 577

MACROMEDIA FLASH MX 2004 - ACTIONSCRIPT
816 pages
Print Icon
To Next Page IconTo Next Page
To Next Page IconTo Next Page
To Previous Page IconTo Previous Page
To Previous Page IconTo Previous Page
Loading...
Object.addProperty() 577
Usage 2: The above example of bookcount and bookname works, but the properties bookcount
and
bookname are added to every instance of the Book object. That means that the cost of having
the properties is two property slots for every instance of the object. If there are many properties
like
bookcount and bookname in a class, they could consume a great deal of memory. Instead, you
can add the properties to
Book.prototype:
function Book () {}
Book.prototype.setQuantity = function(numBooks) {
this.books = numBooks;
}
Book.prototype.getQuantity = function() {
return this.books;
}
Book.prototype.getTitle = function() {
return "Catcher in the Rye";
}
Book.prototype.addProperty("bookcount", Book.prototype.getQuantity,
Book.prototype.setQuantity);
Book.prototype.addProperty("bookname", Book.prototype.getTitle, null);
myBook = new Book();
myBook.bookcount = 5;
order = "You ordered "+myBook.bookcount+" copies of "+myBook.bookname;
Now, the bookcount and bookname properties exist only in one place: the Book.prototype
object. The effect, however, is the same as that of the code in Usage 1, which added
bookcount
and
bookname directly to every instance. If bookcount or bookname is accessed in a Book
instance, the prototype chain is ascended and the getter/setter property in
Book.prototype
is found.
Usage 3: The built-in properties TextFi eld.sc ro l l and
TextField.maxscroll are getter/setter
properties. The TextField object has internal methods
getScroll(), setScroll(), and
getMaxScroll(). The TextField constructor creates the getter/setter properties and points them
to the internal get/set methods, as in the following:
this.addProperty("scroll", this.getScroll, this.setScroll);
this.addProperty("maxscroll", this.getMaxScroll, null);
When a script retrieves the value of myTextField.scroll, the ActionScript interpreter
automatically invokes
myTextField.getScroll(). When a script modifies the value of
myTextField.scroll, the interpreter invokes myTextField.setScroll(). The maxscroll
property does not specify a set function, so attempts to modify
maxscroll are ignored.
Usage 4: Although the built-in
TextField.scroll and TextField.maxscroll properties work
in the Usage 3 example, the properties
scroll and maxscroll are added to every instance of the
TextField object. That means the cost of having the properties is two property slots for every
instance of the object. If there are many properties like
scroll and maxscroll in a class, they
could consume a great deal of memory. Instead, you can add the
scroll and maxscroll
properties to TextField.prototype:
TextField.prototype.addProperty("scroll", this.getScroll, this.setScroll);
TextField.prototype.addProperty("maxscroll", this.getMaxScroll, null);
Now, the scroll and maxscroll properties only exist in one place: the TextField.prototype
object. The effect, however, is the same as the above code that added
scroll and maxscroll
directly to every instance. If
scroll or maxscroll is accessed in a TextField instance, the
prototype chain is ascended and the getter/setter property in TextField.prototype is found.

Table of Contents

Related product manuals