![]() |
dynamic class create
Вообщем наступил на грабли...
требуется создать класс через его имя, откопал интересную доку: http://www.gskinner.com/blog/archive...locations.html однако, пробую: Код:
function getInstanceOf(p_fullName:String):Object не могу понять, в чём проблема... помогите, pls |
В моем случае(перед вызовом функции, создал экземпляр, для того чтобы класс импортировался) возвращает object Object, правда я вопроса не понял.
Попробуй удостовериться, что класс существует...потому что если класс не используеться, то он и не импортируеться во флэшку. Код:
function getInstanceOf(p_fullName:String):Object если мы напишем Код:
import mx.controlsЦитата:
Код:
import mx.controls.*Цитата:
|
хмм... а если нет возможности создать по экземпляру класса?
каким образом тогда можно это обойти? |
как я уже сказал я не понял сути вопроса, тебе нужно создать в условиях AS1 класс написанный на AS2 ? если так то возможнсть уже присутствует(ибо тебе придеться выбрать в настройках AS2 для Flash 6 или 7) ...или я не догоняю?
|
причем тут в условиях ас1 классы ас2??? человек хочет иметь возможность по названию класса создать объект! это как раз чистый ас2
ну проблемы ты правильно указал, если нету явного упоминания класса, его и не будет в результируещем свф, так что либо в библиотеки создать пустые мувы, которые будут связаны с теми классами которые нужны или запихнуть в свф все нужные классы через мтаск - мне так кажется :) |
в условиях AS2 создать AS2 class. Это просто пример функции, на самом деле всё это по классам пораспихано и из классов вызывается
Цитата:
|
потом импорт, это больше деректива к компилятору на сокращение пути к классу, тем более все это действует только в том кадре где импорт указан, естественно в данном случае не поможет....
|
так и думал, что придётся извращаться :(
спасибо за идею с mtasc да и ещё один тупой вопрос из той-же серии.... как получить аргументы, передаваемые функции, достаточно просто и понятна (через arguments). А вот как эти аргументы потом передать конструктору класса в текущей функции? то есть юзание var a = getInstanceOf("classes.map.layers.landscape",val1,val2); было-бы эквивалентно var a = new classes.map.layers.landscape(val1,val2); |
Цитата:
и всеже я до сих пор не врубаюсь, зачем все это, если можно написать new package.Class(); |
:) Nirth представь момент что ты заранее не знаешь что это будеть new x.a.s.Class1 или new x.a.s.Class2
:) через функшн.апли тоже не пройдет, не тот случай, я думаю тебе просто надо будет написать эквивалент оператора new |
вообщем есть 10 - 20 принципиально разных классов, экземпляры которых описываются в xml и по описанию создаются. Причём хочется иметь возможность добавлять классы не изменяя того класса, в котором создаются экземпляры этих самых классов. Очень-уж неохота лезть в написаный код.
Таким образом будет достаточно написать класс, прицепить его с помощью mtasc к swf-ке и описать его экземпляры в xml, не затрагивая другие классы |
Как вариант
Код:
/** |
Цитата:
|
с аргуентами решил не заморачиваться, а передавать всё в одном object конструктору, а он уже сам разберёться :)
|
Цитата:
|
вот именно, а откуда this['a'+'b'] ?
|
Цитата:
orange.utils.doImport (package1.Class1,package2.Class2); или так? orange.utils.doImport ('package1.Class1','package2.Class2'); |
orange.utils.Importer.doImport(package1.Class1) и тд.
извиняюсь сделал ошибку в коментариях сейчас подправлю. |
Объясни мне тупому тогда как именно твой класс импортирует?
З.Ы. попробуй создать пустой файл фла, в нем единственную строчку Код:
mx.events.EventDispatcher |
В первом кадре пишем
Код:
orange.utils.Importer.doImport(mx.controls.CheckBox,mx.controls.DataGrid);Цитата:
|
еще раз: случай без твоего класса:
попробуй создать пустой файл фла, в нем единственную строчку Код:
mx.events.EventDispatcher |
это баг, который возможно устранят. если ты посмотришь в код EventDispatcher'a то заметишь там такую строчку new EventDispatcher - без скобок, тоесть на данный момент, это работает, но по идее класс импортироваться не должен(а в друг у меня просто в глобале такие объекты есть?) так что если макромедия пофиксит данную фичу думаю такой вариант работать не будет
ИМХО. |
твой класс без данного бага в той форме как ты написал работать не будет!!!
потому что без данного бага твой метод доИмпорт получит лишь undefined |
потом это это не баг, импорт классов происходит лишь после того как в глобале не оказалось соответствующих функций конструкторов
|
мда и в правду, намудрил, можно извратиться и вызывать методы конечно, но тогда есть опасность что вызовем чего нить плохого, или ненужного
Код:
args [item][field](); |
Цитата:
Код:
f = function () { |
а вы о чём, ребята? =)
|
Цитата:
|
Код:
f = function () { |
Цитата:
|
То что на данный момент, флэш по левому обрабатывает конструктор, и скорее всего это исправиться(очень на это надеюсь)
а что ты хотел сказать этим? Код:
f = function () { |
Цитата:
Код:
new f |
в C# выдает ошибку если не поставить скобок, я поспрашивал пару программистов на C++ те тоже говорят что без скобок должна выдаваться ошибка, я не гоню.
я констатирую факт, что на данный момент AS слегонца багнутый :) так же прикол в том, что private почему то работает как protected |
Цитата:
|
нуран почитай пожалуйста спецификацию emca которую юзает флэш, а потом уже хохми.
|
Цитата:
|
Цитата:
|
да, сорри, что-то резко выражаюсь =\
|
Ткни ка пальцем, что то я не вижу чтоб не в ecma 262 не в ECMAScript 4 Draft Proposal, строчки где сказанно что объекты можно создавать юзая new но без скобок...
|
| Часовой пояс GMT +4, время: 10:37. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.