Versiones de motor de ejecución: | Flash Player 9, AIR 1.0, Flash Lite 4 |
new
, y se le pueden asignar propiedades dinámicamente. Los objetos también pueden crearse mediante la asignación de un literal de objeto como, por ejemplo:
var obj:Object = {a:"foo", b:"bar"}
Todas las clases que no declaran una clase base explícita amplían la clase Object incorporada.
Puede emplear la clase Object para crear conjuntos asociativos. En el fondo, un conjunto asociativo es una instancia de la clase Object y cada par clave-valor se representa mediante una propiedad y su valor. Otra razón para declarar un conjunto asociativo como tipo Object es que permite utilizar un literal de objeto para llenar el conjunto asociativo (pero sólo en el momento en que se declara). El ejemplo siguiente crea un conjunto asociativo utilizando un literal de objeto, accede a los elementos empleando el operador de punto y el operador de acceso a conjunto y, a continuación, añade un nuevo par clave-valor creando una propiedad nueva:
var myAssocArray:Object = {fname:"John", lname:"Public"}; trace(myAssocArray.fname); // John trace(myAssocArray["lname"]); // Public myAssocArray.initial = "Q"; trace(myAssocArray.initial); // Q
ActionScript 3.0 tiene dos tipos de herencia: herencia de clase y herencia de prototipo:
- Herencia de clase: es el principal mecanismo de herencia y admite la herencia de propiedades fijas. Una propiedad fija es una variable, una constante o un método declarado como parte de una definición de clase. Cada definición de clase se representa ahora mediante un objeto de clase especial que almacena información sobre la clase.
- Herencia de prototipo: es el único mecanismo de herencia que existía en las versiones anteriores de ActionScript y es una forma alternativa de herencia en ActionScript 3.0. Cada clase tiene un objeto prototipo asociado y las propiedades del objeto prototipo son compartidas por todas las instancias de la clase. Cuando se crea una instancia de clase, ésta tiene una referencia al objeto prototipo de su clase, que actúa como vínculo entre la instancia y su objeto prototipo de clase asociado. En tiempo de ejecución, cuando se encuentra una propiedad en una instancia de clase, se comprueba dicha propiedad en el delegado (delegate), que es el objeto prototipo de la clase. Si el objeto prototype no contiene la propiedad, el proceso continúa con la comprobación del delegado del objeto prototipo en niveles superiores sucesivos en la jerarquía, hasta que el motor de ejecución de Flash encuentra la propiedad.
La herencia de clase y la herencia de prototipo pueden darse simultáneamente, como se muestra en el siguiente ejemplo:
class A { var x = 1 prototype.px = 2 } dynamic class B extends A { var y = 3 prototype.py = 4 } var b = new B() b.x // 1 via class inheritance b.px // 2 via prototype inheritance from A.prototype b.y // 3 b.py // 4 via prototype inheritance from B.prototype B.prototype.px = 5 b.px // now 5 because B.prototype hides A.prototype b.px = 6 b.px // now 6 because b hides B.prototype
Mediante el uso de funciones en lugar de clases, puede construir árboles de herencia de prototipo personalizados. Con las clases, el árbol de herencia de prototipo refleja el árbol de herencia de clase. Sin embargo, dado que los objetos prototipo son dinámicos, puede añadir y eliminar propiedades basadas en prototipos en tiempo de ejecución.
Elementos de API relacionados
Propiedad | Definido por | ||
---|---|---|---|
constructor : Object
Una referencia a la clase de objeto o función constructora para una instancia de objeto determinada. | Object | ||
prototype : Object [estática]
Una referencia al objeto prototipo de una clase u objeto de función. | Object |
Método | Definido por | ||
---|---|---|---|
Object()
Crea un objeto Object y almacena una referencia al método constructor del objeto en la propiedad constructor del objeto. | Object | ||
Indica si un objeto tiene definida una propiedad especificada. | Object | ||
Indica si hay una instancia de la clase Object en la cadena de prototipo del objeto especificado como parámetro. | Object | ||
Indica si existe la propiedad especificada y si es enumerable. | Object | ||
Establece la disponibilidad de una propiedad dinámica para operaciones de bucle. | Object | ||
Devuelve la representación de cadena de este objeto, con formato según las convenciones específicas de configuración regional. | Object | ||
Devuelve la representación de cadena del objeto especificado. | Object | ||
Devuelve el valor simple del objeto especificado. | Object |
constructor | propiedad |
public var constructor:Object
Versiones de motor de ejecución: | Flash Player 9, Flash Lite 4, Flash Player 9, AIR 1.0 |
Una referencia a la clase de objeto o función constructora para una instancia de objeto determinada. Si un objeto es una instancia de una clase, la propiedad constructor
contiene una referencia al objeto de la clase. Si un objeto se crea con una función constructora, la propiedad constructor
contiene una referencia a la función constructora. No debe confundir una función constructora con un método constructor de una clase. Una función constructora es un objeto Function empleado para crear objetos y es una alternativa al uso de la palabra clave class
para definir clases.
Si utiliza la palabra clave class
para definir una clase, se asigna al objeto prototipo de la clase una propiedad llamada constructor
que contiene una referencia al objeto de la clase. Una instancia de la clase hereda esta propiedad del objeto prototipo. Por ejemplo, el código siguiente crea una nueva clase, A
y una instancia de clase llamada myA
:
dynamic class A {} trace(A.prototype.constructor); // [class A] trace(A.prototype.constructor == A); // true var myA:A = new A(); trace(myA.constructor == A); // true
Los usuarios avanzados pueden optar por utilizar la palabra clave function
en lugar de la palabra clave class
para definir un objeto Function que puede utilizarse como plantilla para crear objetos. Dicha función se denomina función constructora porque puede utilizarse conjuntamente con el operador new
para crear objetos. Si utiliza la palabra clave function
para crear una función constructora, se asigna a su objeto prototipo una propiedad llamada constructor
que contiene una referencia a la función constructora. Si posteriormente utiliza la función constructora para crear un objeto, el objeto heredará la propiedad constructor
del objeto prototipo de la función constructora. Por ejemplo, el código siguiente crea una nueva función constructora, f
, y un objeto llamado myF
:
function f() {} trace(f.prototype.constructor); // function Function() {} trace(f.prototype.constructor == f); // true var myF = new f(); trace(myF.constructor == f); // true
Nota: la propiedad constructor
es de escritura, lo que significa que el código del usuario puede cambiar de valor con una sentencia de asignación. No es recomendable el cambio de valor de la propiedad constructor
, pero, si escribe código que dependa del valor de la propiedad constructor
, deberá asegurarse de que el valor no se restablece. El valor sólo puede cambiar cuando se accede a la propiedad mediante el objeto prototipo (por ejemplo, className.prototype.constructor
).
Si se accede al constructor
y se compila en modo estricto, se producirá un error en tiempo de compilación porque la propiedad del constructor depende del objeto prototype, que es una entidad de tiempo de ejecución. Si utiliza modo estándar o si la descripción de la clase especifica “dynamic”, el código se ejecuta sin generar un error.
Elementos de API relacionados
prototype | propiedad |
public static var prototype:Object
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Una referencia al objeto prototipo de una clase u objeto de función. La propiedad prototype
se crea y asocia automáticamente a cualquier clase u objeto de función que cree. Esta propiedad se considera estática porque es específica de la clase o función que usted crea. Por ejemplo, si crea una clase, todas las instancias de la clase compartirán el valor de la propiedad prototype
y sólo será accesible como propiedad de clase. Las instancias de la clase no pueden acceder directamente a la propiedad prototype
.
El objeto prototipo de una clase es una instancia especial de dicha clase que proporciona un mecanismo para compartir el estado entre todas las instancias de una clase. En tiempo de ejecución, cuando se encuentra una propiedad en una instancia de clase, se comprueba dicha propiedad en el delegado (delegate), que es el objeto prototipo de la clase. Si el objeto prototype no contiene la propiedad, el proceso continúa con la comprobación del delegado del objeto prototipo en niveles superiores sucesivos en la jerarquía, hasta que el motor de ejecución de Flash encuentra la propiedad.
Nota: en ActionScript 3.0, la herencia de prototipo no es el mecanismo principal de herencia. La herencia de clase, a través de la cual se heredan propiedades fijas en las definiciones de clases, es el principal mecanismo de herencia en ActionScript 3.0.
Object | () | Información sobre |
public function Object()
Versiones de motor de ejecución: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Crea un objeto Object y almacena una referencia al método constructor del objeto en la propiedad constructor
del objeto.
hasOwnProperty | () | método |
AS3 function hasOwnProperty(name:String):Boolean
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Indica si un objeto tiene definida una propiedad especificada. Este método devuelve true
si el objeto de destino tiene una propiedad que coincide con la cadena especificada por el parámetro name
, y false
en caso contrario. Los siguientes tipos de propiedades provocan que este método devuelva true
para objetos que son instancias de una clase (en lugar de objetos de clase):
- Propiedades de instancia fijas: variables, constantes o métodos definidos por la clase del objeto que no son estáticas;
- Propiedades de instancia fijas heredadas: variables, constantes o métodos heredados por la clase del objeto;
- Propiedades dinámicas: propiedades añadidas a un objeto después de que se cree una instancia de éste (fuera de su definición de clase). Para añadir propiedades dinámicas, la clase que define al objeto debe declararse con la palabra clave
dynamic
.
Los siguientes tipos de propiedades provocan que este método devuelva false
para objetos que son instancias de una clase:
- Propiedades estáticas: variables, constantes o métodos definidos con la palabra clave static en la clase que define a un objeto o cualquiera de sus superclases;
- Propiedades prototipo: propiedades definidas en un objeto prototipo que forma parte de la cadena de prototipo del objeto. En ActionScript 3.0, la cadena de prototipo no se utiliza para la herencia de clase, pero continúa existiendo como forma alternativa de herencia. Por ejemplo, una instancia de la clase Array puede obtener acceso al método
valueOf()
porque existe enObject.prototype
, que forma parte de la cadena de prototipo de la clase Array. Aunque puede utilizarvalueOf()
en una instancia de Array, el valor devuelto porhasOwnProperty("valueOf")
para dicha instancia esfalse
.
ActionScript 3.0 también tiene objetos de clase que son representaciones directas de las definiciones de clase. Cuando se le llama en objetos de clase, el método hasOwnProperty()
devuelve true
sólo si una propiedad es estática y está definida en dicho objeto de clase. Por ejemplo, si crea una subclase de Array denominada CustomArray y define una propiedad estática en CustomArray denominada foo
, una llamada a CustomArray.hasOwnProperty("foo")
devolverá true
. No obstante, en el caso de la propiedad estática DESCENDING
definida en la clase Array, una llamada a CustomArray.hasOwnProperty("DESCENDING")
devolverá false
.
Nota: los métodos de la clase Object se crean dinámicamente en el prototipo de Object. Para redefinir este método en una subclase de Object, no utilice la palabra clave override
. Por ejemplo, una subclase de Object implementa function hasOwnProperty():Boolean
en lugar de utilizar una sustitución de la clase base.
Parámetros
name:String — La propiedad del objeto.
|
Boolean — Si el objeto de destino tiene la propiedad especificada por el parámetro name , este valor es true ; en caso contrario es false .
|
isPrototypeOf | () | método |
AS3 function isPrototypeOf(theClass:Object):Boolean
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Indica si hay una instancia de la clase Object en la cadena de prototipo del objeto especificado como parámetro. Este método devuelve true
si el objeto está presente en la cadena de prototipo del objeto especificado por el parámetro theClass
. El método devuelve false
si el objeto de destino no está presente en la cadena de prototipo del objeto theClass
y también si el parámetro theClass
no es un objeto.
Nota: los métodos de la clase Object se crean dinámicamente en el prototipo de Object. Para redefinir este método en una subclase de Object, no utilice la palabra clave override
. Por ejemplo, una subclase de Object implementa function isPrototypeOf():Boolean
en lugar de utilizar una sustitución de la clase base.
Parámetros
theClass:Object — La clase a la que puede referirse el objeto especificado.
|
Boolean — Si el objeto está presente en la cadena de prototipo del objeto especificado por el parámetro theClass , este valor es true , en caso contrario este valor es false .
|
propertyIsEnumerable | () | método |
AS3 function propertyIsEnumerable(name:String):Boolean
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Indica si existe la propiedad especificada y si es enumerable. Si su valor es true
, la propiedad existe y puede enumerarse en un bucle for..in
. La propiedad debe existir en el objeto de destino porque este método no comprueba la cadena de prototipo del objeto de destino.
Aunque las propiedades que se crean son enumerables, las propiedades incorporadas no suelen ser enumerables.
Nota: los métodos de la clase Object se crean dinámicamente en el prototipo de Object. Para redefinir este método en una subclase de Object, no utilice la palabra clave override
. Por ejemplo, una subclase de Object implementa function propertyIsEnumerable():Boolean
en lugar de utilizar una sustitución de la clase base.
Parámetros
name:String — La propiedad del objeto.
|
Boolean — Si la propiedad especificada por el parámetro name es enumerable, este valor es true , en caso contrario, el valor es false .
|
setPropertyIsEnumerable | () | método |
public function setPropertyIsEnumerable(name:String, isEnum:Boolean = true):void
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Establece la disponibilidad de una propiedad dinámica para operaciones de bucle. La propiedad debe existir en el objeto de destino porque este método no comprueba la cadena de prototipo del objeto de destino.
Parámetros
name:String — La propiedad del objeto.
| |
isEnum:Boolean (default = true ) — Si se define como false , la propiedad dinámica no aparece en los bucles for..in y el método propertyIsEnumerable() devuelve false .
|
Elementos de API relacionados
toLocaleString | () | método |
public function toLocaleString():String
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Devuelve la representación de cadena de este objeto, con formato según las convenciones específicas de configuración regional.
La implementación predeterminada de este método no realiza formato con configuración regional específica y devuelve la misma cadena que toString()
. Las subclases siempre deben proporcionar su propia implementación de acuerdo con la configuración regional cuando sea conveniente.
Nota: los métodos de la clase Object se crean dinámicamente en el prototipo de Object. Para redefinir este método en una subclase de Object, no utilice la palabra clave override
. Por ejemplo, una subclase de Object implementa function toLocaleString():String
en lugar de utilizar una sustitución de la clase base.
String — Una representación de cadena de este objeto con formato según las convenciones locales.
|
Elementos de API relacionados
toString | () | método |
public function toString():String
Versiones de motor de ejecución: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Devuelve la representación de cadena del objeto especificado.
Nota: los métodos de la clase Object se crean dinámicamente en el prototipo de Object. Para redefinir este método en una subclase de Object, no utilice la palabra clave override
. Por ejemplo, una subclase de Object implementa function toString():String
en lugar de utilizar una sustitución de la clase base.
String — Una representación de cadena del objeto.
|
valueOf | () | método |
public function valueOf():Object
Versiones de motor de ejecución: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Devuelve el valor simple del objeto especificado. Si este objeto no tiene un valor simple, se devuelve el propio objeto.
Nota: los métodos de la clase Object se crean dinámicamente en el prototipo de Object. Para redefinir este método en una subclase de Object, no utilice la palabra clave override
. Por ejemplo, una subclase de Object implementa function valueOf():Object
en lugar de utilizar una sustitución de la clase base.
Object — El valor simple de este objeto o el propio objeto.
|
Elementos de API relacionados
ObjectExample
y Circle
para demostrar la naturaleza dinámica de la clase Object y para ver cómo se pueden transformar los objetos de valor en objetos Shape y, después, añadirlos en el escenario en las coordenadas x/y especificadas.
El ejemplo crea los objetos de valor firstInitObj
y secondInitObj
. La clase personalizada Circle
acepta el objeto de valor y ejecuta un bucle mientras define sus propiedades internas coincidentes según las definidas en el objeto valor.
package { import flash.display.Sprite; public class ObjectExample extends Sprite { public function ObjectExample() { var firstInitObj:Object = new Object(); firstInitObj.bgColor = 0xFF0000; firstInitObj.radius = 25; firstInitObj.xCenter = 25; firstInitObj.yCenter = 25; var firstCircle:Circle = new Circle(firstInitObj); addChild(firstCircle); firstCircle.x = 50; firstCircle.y = 50; var secondInitObj:Object = {bgColor:0xCCCCCC, radius:50, xCenter:50, yCenter:50}; var secondCircle:Circle = new Circle(secondInitObj); addChild(secondCircle); secondCircle.x = 100; secondCircle.y = 100; } } } import flash.display.Shape; class Circle extends Shape { public var bgColor:Number = 0xFFFFFF; public var radius:Number = 0; public var xCenter:Number = 0; public var yCenter:Number = 0; public function Circle(initObj:Object) { for(var i:String in initObj) { this[i] = initObj[i]; } draw(); } public function draw():void { graphics.beginFill(bgColor); graphics.drawCircle(xCenter, yCenter, radius); graphics.endFill(); } }
Tue Jun 12 2018, 02:12 PM Z