ActionScript-3 пространства имен и динамические типы? - PullRequest
1 голос
/ 02 июля 2010

Ладно, это странно ...

Можно ли добавлять члены с пространством имен в анонимные или динамические типы?Скажем, если вы хотите «пометить» встроенный тип как «затронутый», например?

Раньше я думал о добавлении скрытых элементов в StyleSheets и их внутренние стили и задавался вопросом, как предотвратить их перезапись или сериализацию.или что угодно.Я сдался, потому что есть много других способов сделать то, что я хотел, и сроки подстерегают - но я все еще хотел бы знать, если это вообще выполнимо?

Я пытался, но у меня былоне повезло ...

namespace mynamespace = "http://foo.bar/";
Object.prototype.test = "default";
Object.prototype.mynamespace::test = "mynamespace";

var o:Object = new Object();
trace(o.test);
trace(o.mynamespace::test);

На последнем Flex 4 SDK у меня ничего не получалось ...

1 Ответ

1 голос
/ 02 июля 2010

Я предлагаю вам сделать это так:

package  {
    import flash.utils.Dictionary;
    public class Annotations {
        private static var annotations:Dictionary = new Dictionary(true);
        public static function of(target:Object):Object {
            var ret:Object = annotations[target];
            if (ret == null) annotations[target] = ret = Object;
            return ret;
        }
    }
}

использование

var o:Object = new Object();
Annotations.of(o).foo = 1234;
trace(Annotations.of(o).foo);//1234

пожалуйста, обратите внимание, это относительно дорого, но на самом деле работает достаточно хорошо. В критических ситуациях производительности вам следует избегать использования как словарей для слабых ключей, так и статических вызовов.

Greetz
back2dos

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...