![]() ![]() ![]() | |
![]() | |
![]() | |
![]() |
Flash Player 6. En archivos de clase externos, puede utilizar get
o set
en lugar de este método.
myObject
.addProperty(prop
,getFunc
,setFunc
)
prop
Nombre de la propiedad de objeto que se debe crear.
getFunc
Función que se invoca para recuperar el valor de la propiedad; este parámetro es un objeto de función.
setFunc
Función que se invoca para definir el valor de la propiedad; este parámetro es un objeto de función. Si pasa el valor null
en este parámetro, la propiedad es de sólo lectura.
Devuelve el valor true
si la propiedad se crea correctamente; en caso contrario, devuelve false
.
Método; crea una propiedad de captador/definidor. Cuando Flash lee una propiedad de captador/definidor, invoca la función get y el valor devuelto por la función se convierte en un valor de prop
. Cuando Flash escribe una propiedad de captador/definidor, invoca la función set y le pasa el nuevo valor como un parámetro. Si existe una propiedad con ese nombre concreto, la nueva propiedad lo sobrescribe.
La función "get" es una función que no tiene parámetros. El valor devuelto puede ser de cualquier tipo. El tipo de valor puede cambiar según la invocación. El valor devuelto se trata como el valor actual de la propiedad.
La función "set" es una función que acepta un parámetro: el nuevo valor de la propiedad. Por ejemplo, si la propiedad x
se asigna mediante la sentencia x = 1
, la función set recibirá el parámetro 1
de tipo número. El valor devuelto por la función "set" se pasa por alto.
Puede agregar propiedades de captador/definidor a los objetos prototipo. Si agrega una propiedad de captador/definidor a un objeto prototipo, todas las instancias del objeto que heredan el objeto prototipo heredarán la propiedad de captador/definidor. Esto hace posible agregar una propiedad de captador/definidor a una ubicación, el objeto prototipo, y aplicarla a todas las instancias de una clase (como si se agregaran métodos a objetos prototipo). Si se invoca una función get/set para una propiedad de captador/definidor de un objeto prototipo heredado, la referencia que se pasa a la función get/set será el objeto al que se hizo referencia originalmente, no el objeto prototipo.
Si no se invoca correctamente, Object.addProperty()
puede no funcionar y generar un error. En la tabla siguiente se describen los errores que pueden producirse:
Condición de error |
Qué sucede |
---|---|
|
Devuelve |
|
Devuelve |
|
Devuelve |
Sintaxis 1: objeto que tiene dos métodos internos, setQuantity()
y getQuantity()
. Puede utilizarse una propiedad, bookcount
, para invocar estos métodos cuando se define o recupera. Un tercer método interno, getTitle()
, devuelve un valor de sólo lectura asociado a la propiedad bookname
:
function Book() {this.setQuantity = function(numBooks) {this.books = numBooks; }this.getQuantity = function() { return this.books;} this.getTitle = function() { return "Catcher in the Rye"; } this.addProperty("bookcount", this.getQuantity, this.setQuantity); this.addProperty("bookname", this.getTitle, null); } myBook = new Book(); myBook.bookcount = 5; order = "Ha solicitado " + myBook.bookcount + " copias de " + myBook.bookname;
Cuando el script recupera el valor de myBook.bookcount
, el intérprete de ActionScript invoca automáticamente myBook.getQuantity()
. Cuando un script modifica el valor de myBook.bookcount
, el intérprete invoca myObject.setQuantity()
. La propiedad bookname
no especifica una función set, de modo que los intentos de modificar bookname
se pasan por alto.
Sintaxis 2: el ejemplo anterior de bookcount
y bookname
funciona, pero las propiedades bookcount
y bookname
se añaden a cada instancia del objeto Book
. Esto significa que el coste de tener estas propiedades es que haya dos lugares de propiedades para cada instancia del objeto. Si hay muchas propiedades como bookcount
y bookname
en una clase, es posible que requieran gran cantidad de memoria. En su lugar, puede añadir las propiedades para 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 = "Ha solicitado "+myBook.bookcount+" copias de "+myBook.bookname;
Ahora las propiedades bookcount
y bookname
sólo existen en un lugar: el objeto Book.prototype
. El resultado, no obstante, es el mismo que el del código de la sintaxis 1, que añade bookcount
y bookname
directamente en cada instancia. Si se accede a bookcount
o bookname
en una instancia Book
, la cadena de prototipo asciende y se encuentra la propiedad de captador/definidor en Book.prototype
.
Sintaxis 3: las propiedades incorporadas TextField.scroll
y TextField.maxscroll
son propiedades de captador/definidor. El objeto TextField tiene los métodos internos getScroll()
, setScroll()
y getMaxScroll()
. El constructor TextField crea las propiedades de captador/definidor y las dirige a los métodos internos get/set, tal como se muestra a continuación:
this.addProperty("scroll", this.getScroll, this.setScroll); this.addProperty("maxscroll", this.getMaxScroll, null);
Cuando un script recupera el valor de myTextField.scroll
, el intérprete de ActionScript invoca automáticamente myTextField.getScroll()
. Cuando un script modifica el valor de myTextField.scroll
, el intérprete invoca myTextField.setScroll()
. La propiedad maxscroll
no tiene especificada una función set, de modo que los intentos de modificar maxscroll
se pasan por alto.
Sintaxis 4: aunque las propiedades TextField.scroll
y TextField.maxscroll
incorporadas funcionan en el ejemplo de sintaxis 3, las propiedades scroll
y maxscroll
se añaden a cada una de las instancias del objeto TextField. Esto significa que el coste de tener estas propiedades es que haya dos lugares de propiedades para cada instancia del objeto. Si hay muchas propiedades como scroll
y maxscroll
en una clase, es posible que requieran gran cantidad de memoria. En su lugar, puede agregar las propiedades scroll
y maxscroll
a TextField.prototype
:
TextField.prototype.addProperty("scroll", this.getScroll, this.setScroll); TextField.prototype.addProperty("maxscroll", this.getMaxScroll, null);
Ahora, las propiedades scroll
y maxscroll
sólo existen en un lugar: el objeto TextField.prototype
. Sin embargo, el efecto es el mismo que el código anterior, en el que las propiedades scroll
y maxscroll
se agregaban directamente a cada instancia. Si se accede a scroll
o maxscroll
desde una instancia TextField, se asciende en la cadena de prototipos y se encuentra la propiedad de captador/definidor de TextField.prototype
.
![]() | |
![]() | |
![]() | |
![]() ![]() ![]() |