Как узнать, является ли объект динамическим в AS3 - PullRequest
4 голосов
/ 14 апреля 2009

В Action Script 3 вы можете написать класс, который определяет динамический объект (MovieClip и Object являются двумя примерами), эти объекты можно изменять во время выполнения. Что я хочу знать, есть ли какой-нибудь способ (конечно, во время выполнения) узнать, является ли определенный объект динамическим или нет.

PS: без создания чего-то подобного:

function isDynamic(object) {
    try {
        object.newProperty = 'someValue'
    } catch (e) {
        return false
    }
    return true
}

Ответы [ 4 ]

7 голосов
/ 14 апреля 2009

CookieOfFortune имеет правильную идею, но, к сожалению, сам код имеет проблемы, isDynamic является атрибутом, и возвращаемым значением будет XMLList со значением String, которое отражает истинное или ложное значение, а не дочерний узел, который напрямую возвращает логическое значение. Это должно выглядеть примерно так:

function isDynamic(object) : Boolean
{
    var type:XML = describeType(object);
    return type.@isDynamic.toString() == "true";
}
3 голосов
/ 26 мая 2009

Будь осторожен!

В любое время, когда вы хотите использовать функцию описываетType (), , пожалуйста, , пожалуйста , пожалуйста используйте вариант:

import mx.utils.DescribeTypeCache;
var typeDesc:XML = DescribeTypeCache.describeType(object).typeDescription;

Производительность повторных вызовов к отражающему механизму времени выполнения абсолютно отстой . Вот почему Adobe изобрела класс DescribeTypeCache.

3 голосов
/ 14 апреля 2009

Вы можете использовать descriptionType из flash.utils для описания объекта в форме XML. Вот ссылка на API: flash.utils.describeType

function isDynamic(object) {
    var type:XML = describeType(object);
    if (type.@isDynamic == "true") return true;
    return false;
}
2 голосов
/ 05 августа 2011

Это очень старый пост, но я добавлю опцию для будущих пользователей.

AS3 имеет встроенный способ сделать это:

mx.utils.ObjectUtil.isDynamicObject(yourObject);

Подробнее об этом здесь .

...