Замяна на публичен метод в динамично зареден клас с AS3 и getDefinitionByName()

Имам два SWF файла: main.swf и external.swf. main.swf има нужда от достъп до някои методи във external.swf, така че зарежда external.swf в себе си и използва getDefinitionByName("package.Class") за достъп до класа и един от неговите методи:

var ExternalClass = getDefinitionByName("package.Class") as Class;
var ClassInstance = new ExternalClass();
var NeededFunction:Function = ClassInstance["NeededFunction"] as Function;
var response:String = NeededFunction(param);

Сега трябва да разширя функционалността на NeededFunction (което е публичен метод)... Знам, че е възможно да отменя публичните методи, но как да направя това с динамично зареден клас?

Мислех, че мога да направя нещо подобно, но не работи:

var ClassInstance["NeededFunction"] = function(param1:uint):String { 
    var newString = "Your number is: "+param1.toString();  //New functionality
    return newString;
}

person lefthandpath    schedule 22.08.2010    source източник


Отговори (2)


Друг начин да се справите с това може да бъде да имате класовете в пакет, който е достъпен и от двата SWF файла. Просто добавете основната папка на класовете към вашия път на Actionscript.

Вместо да получите клас с помощта на getDefinitionByName, вие просто го импортирате. Що се отнася до замяната, можете да създадете клас, който заменя един от класовете, или можете да създадете интерфейс.


import com.yourlocation.ExternalClass;

var external:ExternalClass = new ExternalClass();

person PatrickS    schedule 22.08.2010
comment
За съжаление, нямам достъп до класовете на SWF или щях да направя това, което предложихте отдавна. Методът, който трябва да разширя, е от собствена SWC библиотека, така че не мога да променя SWC, освен ако не се опитам да го разглобя, което не възнамерявам да правя. - person lefthandpath; 22.08.2010
comment
Тази статия може да помогне: airtightinteractive.com/2009/ 06/ - person PatrickS; 22.08.2010

С помощта на FlashDevelop това е доста лесно за коригиране.

Щракнете с десния бутон върху вашия включен swc от списъка с проекти. Изберете опции и след това „включете библиотека (пълна библиотека)“.

..вече можете да използвате getDefinitionByName, за да получите нерефериран клас от вашия swc файл.

person Daniel    schedule 21.02.2012