Versões de runtime: | Flash Player 9, AIR 1.0, Flash Lite 4 |
new
e podem ter propriedades atribuídas a eles dinamicamente. Objetos também podem ser criados através da atribuição de um literal de objeto, como em:
var obj:Object = {a:"foo", b:"bar"}
Todas as classes que não declaram uma classe base explícita estendem a classe Object embutida.
Você pode usar a classe Object para criar associative arrays. Na realidade, uma matriz associativa é uma ocorrência da classe Object e cada par de chave-valor é representado por uma propriedade e seu respectivo valor. Outro motivo de declarar uma matriz associativa usando o tipo de dados Object é que você pode usar um literal de objeto para preencher sua matriz associativa (mas apenas no momento em que ele for declarado). O exemplo a seguir cria uma matriz associativa usando um literal de objeto, acessa itens usando o operador de pontos e o operador de acesso a matriz e então adiciona um novo par de chave-valor com a criação de uma nova propriedade:
var myAssocArray:Object = {fname:"John", lname:"Public"}; trace(myAssocArray.fname); // John trace(myAssocArray["lname"]); // Public myAssocArray.initial = "Q"; trace(myAssocArray.initial); // Q
O ActionScript 3.0 tem dois tipos de herança: herança de classe e herança de protótipo:
- Herança de classe - é o mecanismo principal de herança e oferece suporte para a herança de propriedades fixas. Uma propriedade fixa é uma variável, uma constante ou um método declarado como parte de uma definição de classe. Cada definição de classe é agora representada por um objeto de classe especial que armazena informações sobre a classe.
- Herança de protótipo - é o único mecanismo de herança em versões anteriores do ActionScript e serve como forma alternativa de herança no ActionScript 3.0. Cada classe tem um objeto de protótipo associado, e as propriedades desse objeto de protótipo são compartilhadas por todas as ocorrências da classe. Quando uma ocorrência de classe é criada, ela tem uma referência ao objeto de protótipo dessa classe, que serve como link entre a ocorrência e seu objeto de protótipo de classe associado. Em tempo de execução, quando uma propriedade não for encontrada em uma ocorrência de classe, o representante, que é o objeto de protótipo da classe, será verificado para a localização dessa propriedade. Se o objeto de protótipo não contiver a propriedade, o processo continuará com a verificação do respectivo representante em níveis consecutivamente superiores da hierarquia, até o tempo de execução do Flash encontrar a propriedade.
Tanto a herança de classe quanto a herança de protótipo podem existir simultaneamente, como mostra o exemplo a seguir:
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
Usando funções no lugar de classes, você pode construir árvores personalizadas de herança de protótipo. Com classes, a árvore de herança de protótipo espelha a árvore de herança de classe. Entretanto, como os objetos de protótipo são dinâmicos, você pode adicionar e excluir propriedades com base em protótipo em tempo de execução.
Elementos da API relacionados
Propriedade | Definido por | ||
---|---|---|---|
constructor : Object
Uma referência ao objeto de classe ou à função de construtor de uma determinada ocorrência de objeto. | Object | ||
prototype : Object [estático]
Uma referência ao objeto de protótipo de um objeto de classe ou função. | Object |
Método | Definido por | ||
---|---|---|---|
Object()
Cria um objeto Object e armazena uma referência ao método do construtor desse objeto na respectiva propriedade "constructor". | Object | ||
Indica se um objeto tem uma propriedade especificada definida. | Object | ||
Indica se uma ocorrência da classe Object está na cadeia de protótipos do objeto especificado como o parâmetro. | Object | ||
Indica se a propriedade especificada existe e é enumerável. | Object | ||
Define a disponibilidade de uma propriedade dinâmica para operações de repetição. | Object | ||
Retorna a representação da string deste objeto, formatado segundo as convenções específicas para a localidade. | Object | ||
Retorna a representação de string do objeto especificado. | Object | ||
Retorna o valor primitivo do objeto especificado. | Object |
constructor | propriedade |
public var constructor:Object
Versões de runtime: | Flash Player 9, Flash Lite 4, Flash Player 9, AIR 1.0 |
Uma referência ao objeto de classe ou à função de construtor de uma determinada ocorrência de objeto. Se um objeto for uma ocorrência de uma classe, a propriedade constructor
terá uma referência ao objeto da classe. Se um objeto for criado com uma função de construtor, a propriedade constructor
terá uma referência à essa função de construtor. Não confunda uma função de construtor com um método de construtor de uma classe. Uma função de construtor é um objeto Function usado para criar objetos e é uma alternativa ao uso da palavra-chave class
para a definição de classes.
Se você usar a palavra-chave class
para definir uma classe, o objeto de protótipo dessa classe será atribuído com uma propriedade denominada constructor
que contém uma referência ao objeto da classe. Uma ocorrência da classe herda essa propriedade do objeto de protótipo. Por exemplo, o código a seguir cria uma nova classe A
, e uma ocorrência de classe denominada 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
Os usuários avançados podem optar por usar a palavra-chave function
em vez da palavra-chave class
para definir um objeto Function que pode ser usado como modelo para a criação de objetos. Essa função é chamada de função de construtor porque você pode usá-la em conjunto com o operador new
para criar objetos. Se você usar a palavra-chave function
para criar uma função de construtor, seu objeto de protótipo será atribuído com uma propriedade denominada constructor
que faz referência à função de construtor. Em seguida, se você usar a função de construtor para criar um objeto, este herdará a propriedade constructor
do objeto de protótipo da função de construtor. Por exemplo, o código a seguir cria uma nova função de construtor, f
, e um objeto denominado 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: a propriedade constructor
é gravável, o que significa que o código do usuário pode alterar seu valor com uma instrução de atribuição. Não convém alterar o valor da propriedade constructor
. Porém, se você gravar um código que depende do valor dessa propriedade constructor
, será necessário garantir que esse valor não seja redefinido. O valor apenas pode ser alterado quando a propriedade é acessada por meio do objeto de protótipo (por exemplo, className.prototype.constructor
).
Se você acessa a propriedade constructor
e compila no modo restrito, você receberá um erro no momento da compilação porque a propriedade de construtor depende do objeto de protótipo, que é uma entidade de tempo de execução. Se você usar o modo padrão ou se a descrição da classe especificar "dinâmico", o código será executado sem gerar um erro.
Elementos da API relacionados
prototype | propriedade |
public static var prototype:Object
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Uma referência ao objeto de protótipo de um objeto de classe ou função. A propriedade prototype
é automaticamente criada e anexada a qualquer objeto de função ou classe que você criar. Essa propriedade é estática já que ela é específica à classe ou à função criada. Por exemplo, se você criar uma classe, o valor da propriedade prototype
será compartilhado por todas as ocorrências da classe e estará acessível somente como uma propriedade de classe. Ocorrências da sua classe não podem acessar diretamente a propriedade prototype
.
O objeto de protótipo de uma classe é uma ocorrência especial dessa classe que oferece um mecanismo para compartilhamento de estado entre todas as ocorrências de uma classe. Em tempo de execução, quando uma propriedade não for encontrada em uma ocorrência de classe, o representante, que é o objeto de protótipo da classe, será verificado para a localização dessa propriedade. Se o objeto de protótipo não contiver a propriedade, o processo continuará com a verificação do respectivo representante em níveis consecutivamente superiores da hierarquia, até o tempo de execução do Flash encontrar a propriedade.
Nota: no ActionScript 3.0, a herança de protótipo não é o mecanismo principal para herança. A herança de classe, que determina a herança de propriedades fixas em definições de classe, é o mecanismo de herança principal no ActionScript 3.0.
Object | () | Construtor |
public function Object()
Versões de runtime: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Cria um objeto Object e armazena uma referência ao método do construtor desse objeto na respectiva propriedade constructor
.
hasOwnProperty | () | método |
AS3 function hasOwnProperty(name:String):Boolean
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Indica se um objeto tem uma propriedade especificada definida. Esse método retornará true
se o objeto de destino tiver uma propriedade que corresponda à string especificada pelo parâmetro names
; caso contrário, retornará false
. Os seguintes tipos de propriedades fazem com que esse método retorne true
para objetos que são ocorrências de uma classe (ao contrário de objetos de classe).
- Propriedades de ocorrências fixas—variáveis, constantes ou métodos definidos pela classe do objeto que não são estáticos;
- Propriedades de ocorrências fixas herdadas—variáveis, constantes ou métodos herdados pela classe do objeto;
- Propriedades dinâmicas—propriedades adicionadas a um objeto depois que ele é instanciado (fora da sua definição de classe). Para adicionar propriedades dinâmicas, a classe de definição do objeto deve ser declarada com a palavra-chave
dynamic
.
Os seguintes tipos de propriedades fazem com que esse método retorne false
para objetos que são ocorrências de uma classe:
- Propriedades estáticas—variáveis, constantes ou métodos definidos com a palavra-chave na classe de definição de um objeto ou em qualquer uma de suas superclasses;
- Propriedades de protótipo—propriedades definidas em um objeto de protótipo que faz parte da cadeia de protótipos desse objeto. No ActionScript 3.0, a cadeia de protótipos não é usada para herança de classe, mas ainda existe como forma de herança alternativa. Por exemplo, uma ocorrência da classe Array pode acessar o método
valueOf()
porque ele existe emObject.prototype
, que faz parte da cadeia de protótipos da classe Array. Embora você possa usarvalueOf()
em uma ocorrência de Array, o valor de retorno dehasOwnProperty("valueOf")
para essa ocorrência éfalse
.
O ActionScript 3.0 também tem objetos de classe, que são representações diretas de definições de classe. Quando chamado em objetos de classe, o método hasOwnProperty()
apenas retornará true
se uma propriedade for estática e tiver sido definida nesse objeto de classe. Por exemplo, se você criar uma subclasse de Array denominada CustomArray e definir uma propriedade estática em CustomArray denominada foo
, uma chamada a CustomArray.hasOwnProperty("foo")
retornará true
. Para a propriedade estática DESCENDING
definida na classe Array, entretanto, uma chamada para CustomArray.hasOwnProperty("DESCENDING")
retorna false
.
Nota: os métodos da classe Object são dinamicamente criados no protótipo de Object. Para redefinir esse método em uma subclasse de Object, não use a palavra-chave override
. Por exemplo, uma subclasse de Object implementa function hasOwnProperty():Boolean
em vez de usar uma substituição da classe base.
Parâmetros
name:String — A propriedade do objeto.
|
Boolean — Se o objeto de destino tiver a propriedade especificada pelo parâmetro names , esse valor será true ; caso contrário, será false .
|
isPrototypeOf | () | método |
AS3 function isPrototypeOf(theClass:Object):Boolean
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Indica se uma ocorrência da classe Object está na cadeia de protótipos do objeto especificado como o parâmetro. Esse método retornará true
se o objeto estiver na cadeia de protótipos do objeto especificado pelo parâmetro theClass
. O método retornará false
se o objeto de destino estiver ausente da cadeia de protótipos do objeto de theClass
e também se o parâmetro theClass
não for um objeto.
Nota: os métodos da classe Object são dinamicamente criados no protótipo de Object. Para redefinir esse método em uma subclasse de Object, não use a palavra-chave override
. Por exemplo, uma subclasse de Object implementa function isPrototypeOf():Boolean
em vez de usar uma substituição da classe base.
Parâmetros
theClass:Object — A classe à qual o objeto especificado pode se referir.
|
Boolean — Se o objeto estiver na cadeia de protótipos do objeto especificado pelo parâmetro theClass , esse valor será true ; caso contrário, será false .
|
propertyIsEnumerable | () | método |
AS3 function propertyIsEnumerable(name:String):Boolean
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Indica se a propriedade especificada existe e é enumerável. Se for true
, a propriedade existe e pode ser enumerada em uma repetição for..in
. A propriedade deve existir no objeto de destino porque esse método não verifica a cadeia de protótipos do objeto de destino.
As propriedades criadas por você são enumeráveis; mas, em geral, as propriedades embutidas não são enumeráveis.
Nota: os métodos da classe Object são dinamicamente criados no protótipo de Object. Para redefinir esse método em uma subclasse de Object, não use a palavra-chave override
. Por exemplo, uma subclasse de Object implementa function propertyIsEnumerable():Boolean
em vez de usar uma substituição da classe base.
Parâmetros
name:String — A propriedade do objeto.
|
Boolean — Se a propriedade especificada pelo parâmetro names for enumerável, esse valor será true ; caso contrário, será false .
|
setPropertyIsEnumerable | () | método |
public function setPropertyIsEnumerable(name:String, isEnum:Boolean = true):void
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Define a disponibilidade de uma propriedade dinâmica para operações de repetição. A propriedade deve existir no objeto de destino porque esse método não verifica a cadeia de protótipos do objeto de destino.
Parâmetros
name:String — A propriedade do objeto.
| |
isEnum:Boolean (default = true ) — Se definida como false , a propriedade dinâmica não aparecerá em repetições for..in e o método propertyIsEnumerable() retornará false .
|
Elementos da API relacionados
toLocaleString | () | método |
public function toLocaleString():String
Versão da linguagem: | ActionScript 3.0 |
Versões de runtime: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Retorna a representação da string deste objeto, formatado segundo as convenções específicas para a localidade.
A implementação padrão deste método não executa a formatação específica para a localidade e devolve a mesma string que toString()
. As subclasses devem fornecer a sua própria implementação de reconhecimento de local quando apropriado.
Nota: os métodos da classe Object são dinamicamente criados no protótipo de Object. Para redefinir esse método em uma subclasse de Object, não use a palavra-chave override
. Por exemplo, uma subclasse de Object implementa function toLocaleString():String
em vez de usar uma substituição da classe base.
String — Uma representação da string deste objeto formatada segundo as convenções locais.
|
Elementos da API relacionados
toString | () | método |
public function toString():String
Versões de runtime: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Retorna a representação de string do objeto especificado.
Nota: os métodos da classe Object são dinamicamente criados no protótipo de Object. Para redefinir esse método em uma subclasse de Object, não use a palavra-chave override
. Por exemplo, uma subclasse de Object implementa function toString():String
em vez de usar uma substituição da classe base.
String — Uma representação de string do objeto.
|
valueOf | () | método |
public function valueOf():Object
Versões de runtime: | Flash Player 9, AIR 1.0, Flash Lite 4 |
Retorna o valor primitivo do objeto especificado. Se esse objeto não tiver um valor primitivo, o objeto propriamente dito será retornado.
Nota: os métodos da classe Object são dinamicamente criados no protótipo de Object. Para redefinir esse método em uma subclasse de Object, não use a palavra-chave override
. Por exemplo, uma subclasse de Object implementa function valueOf():Object
em vez de usar uma substituição da classe base.
Object — O valor primitivo desse objeto ou o objeto propriamente dito.
|
Elementos da API relacionados
ObjectExample
e Circle
para demonstrar a natureza dinâmica da classe Object e como os objetos de valor podem ser transformados em objetos Shape e, em seguida, adicionados ao palco nas coordenadas x/y especificadas.
O exemplo cria os objetos de valor firstInitObj
e secondInitObj
. A classe personalizada Circle
aceita o objeto de valor e repete sobre ele enquanto define suas propriedades internas correspondentes como as propriedades definidas no objeto de 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(); } }
Wed Jun 13 2018, 11:10 AM Z