在单独的文件中组织长脚本?
-
28-09-2019 - |
题
为了组织我的代码,我正在尝试将(冗长的)主控制器类分成单独的文件, 但 我的新文件仍然必须访问主控制器类的变量和功能。
我正在尝试将控制器类剪切并粘贴到新的类/文件中,允许控制器类调用新类,并允许新类可以访问控制器类的属性和功能。
假设我并不完全掩盖适当的设计模式,以下是我未能成功完成此任务的尝试:
package
{
import flash.display.Sprite;
import flash.events.Event;
public class Test extends Sprite
{
public var myString:String;
public function Test()
{
if (stage)
init(null);
else
addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(evt:Event):void
{
if (hasEventListener(Event.ADDED_TO_STAGE))
removeEventListener(Event.ADDED_TO_STAGE, init);
/////////////// MOVE COMMENTED CODE TO NEW FILE ///////////////////////
//
// //Assign The String A Value
// myString = "Hello world";
//
// //Draw A Blue Square
// var sq:Sprite = new Sprite();
// sq.graphics.beginFill(0x0000FF);
// sq.graphics.drawRect(10, 10, 100, 100);
// sq.graphics.endFill();
// super.addChild(sq);
//
// //Call Tracer Function
// tracer();
//
//////////////////////////////////////////////////////////////////////
//Call pasted method in NewFile.as
NewFile.myNewFunction(); // <- this doesn't work
}
public function tracer():void
{
trace(myString);
}
}
}
新文件无法访问控制器类 - 不起作用。我如何编写新文件,以便它确实可以访问控制器类的属性,功能,阶段等,就好像其代码从未被删除并且仍处于原始位置一样。
package
{
public class NewFile
{
public static function myNewFuntion():void
{
//Assign The String A Value
myString = "Hello world";
//Draw A Blue Square
var sq:Sprite = new Sprite();
sq.graphics.beginFill(0x0000FF);
sq.graphics.drawRect(10, 10, 100, 100);
sq.graphics.endFill();
super.addChild(sq);
//Call Tracer Function
tracer();
}
}
}
解决方案
public class MainClass extends Sprite { private var subClass:SubClass; public function MainClass { var controller:Controller = new Controller(); subClass = new SubClass(controller); addChild( subClass ); } private function init():void { subClass.doWhatever(); } } public class Controller { public function doThis():void { } public function doThat():void { trace("controller do that..."); } public function doSomethingElse():void { } } public class Subclass extends Sprite { private var controller:Controller; public function Subclass(controller:Controller) { this.controller = controller; trace( "new Subclass instance!" ); } public function doWhatever():void { controller.doThat(); } }
其他提示
此代码
//Call Tracer Function
tracer();
由于示踪剂不是静态方法,因此无法工作。
这个 :
super.addChild(sq);
也不起作用,因为newfile不会继承任何类。 super()
在继承关系中称为母班的同喻方法。您应该做的更可能是一个构图或聚合关系:newfile不是控制器,而是控制器具有newfile。
如果您不给我们错误消息,很难确切知道什么问题。
在设计方面,我必须同意帕特里克斯。您可能需要检查复合图案,这可能是您需要的。
不隶属于 StackOverflow