Просмотр полной версии : ООП передача параметра
Здравствуйте!
В библиотеке есть символ с именем "_hello", он определен как наследник класса My_class.
Итак код фильма
_root.attachMovie('_hello','_hello',1)
код класса
class My_class extends MovieClip{
public function My_class(_param:Number) {
trace(_param+" hello world")
}
}
Вопрос: как передать в конструктор параметр "_param"?
Поскольку вы никогда явно конструктор MovieClip'a не вызываете, то передать в него аргументы вы тоже не сможете. Выходом может быть класс-фабрика, который будет это делать примерно так:
[не рабочий код]
ClipFactory.createClassObject(parent, "linkage", TheClass, {argument, argument...}):MovieClip
{
var clip:MovieClip = parent.attachMovie("linkage", "linkage", parent.getNextHighestDepth(), {argument, argument...});
Object.registerClass(clip, TheClass);
return clip;
}
При условии, что в конструкторе вы ничего не передаете, а argument соответствует какому-нибудь полю в классе TheClass.
В конструктор — никак. Но у attachMovie есть четвертый аргумент.
Mnilionic
04.09.2008, 01:32
_root.attachMovie('_hello','_hello',1, {_param: 'Mnilionic'});
class My_class extends MovieClip{
var _param;
public function My_class() {
trace(_param+", hello world")
}
}
var myClass:MyClass = this.attachMovie("myClass", "myClass", this.getNextHighestDepth(), { myVar: "asdf" });
class MyClass extends MovieClip
{
private var _myVar:String;
public function MyClass()
{
trace(_myVar);
}
public function get myVar():String
{
return _myVar;
}
public function set myVar(value:String):Void
{
_myVar = value;
}
}
class ClipFactory
{
public static function createClassObject(parent:MovieClip,
linkage:String,
classAlias:Function,
initArguments:Object):MovieClip
{
var b:Boolean = Object.registerClass(linkage, classAlias);
var clip:MovieClip = parent.attachMovie(linkage, linkage,
parent.getNextHighestDepth(),
initArguments);
trace("called "+b);
return clip;
}
}
class Foo extends MovieClip
{
public var test:String;
public function Foo(){ trace("foo constructor: " + test); };
public function traceTest():Void
{
trace(test);
}
public function toString():String { return "Foo"; };
}
import ClipFactory;
import Foo;
var foo:Foo = Foo(ClipFactory.createClassObject(this, "aaa", Foo, {test:"abcd"}));
trace(foo.toString())
foo.traceTest();
рабочий вариант =)
переменная была определена до выполнения конструктора, фактически то же самое, что и определить ее во время выполнения конструктора =)
Всем большое спасибо!
Выбрал вариант Mnilionic.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.