Actionscript 3 如何在不扩展或实例化的情况下访问类的属性和方法?
假设我有一个定义的ClassA。 ClassB扩展了ClassA,舞台上有一个电影剪辑实例链接到ClassB 在不扩展ClassB或创建新的ClassB实例的情况下,ClassC如何访问ClassB的属性和方法? 我目前的做法是引用链接到ClassB的stage实例,然后使用点语法访问ClassB实例变量,这仅在访问的变量是公共变量或内部变量时有效,具体取决于ClassC是哪个包的一部分。我想知道是否有更好、更干净的方法来实现这一点 编辑:代码示例Actionscript 3 如何在不扩展或实例化的情况下访问类的属性和方法?,actionscript-3,class,flash-cs5.5,flash-ide,Actionscript 3,Class,Flash Cs5.5,Flash Ide,假设我有一个定义的ClassA。 ClassB扩展了ClassA,舞台上有一个电影剪辑实例链接到ClassB 在不扩展ClassB或创建新的ClassB实例的情况下,ClassC如何访问ClassB的属性和方法? 我目前的做法是引用链接到ClassB的stage实例,然后使用点语法访问ClassB实例变量,这仅在访问的变量是公共变量或内部变量时有效,具体取决于ClassC是哪个包的一部分。我想知道是否有更好、更干净的方法来实现这一点 编辑:代码示例 package com.core.stage.
package com.core.stage.classes {
import flash.display.MovieClip;
public class ClassA extends MovieClip {
public var classAvar:uint = 0;
public function ClassA() {
}
protected function classAfunction(funPar:uint):void {
classAvar = 2 * funPar;
}
}
}
package com.core.stage.classes {
import com.core.stage.classes.ClassA;
public class ClassB extends ClassA {
public function ClassB() {
classAfunction(10);
}
}
}
package com.core.stage.classes {
import flash.display.MovieClip;
public class ClassC extends MovieClip {
private var classBreference:*;
public function ClassC() {
classBreference = Object(parent);
trace(classBreference.classAvar); // Outputs 20.
}
}
}
所以我主要想知道的是,在使用ClassC时,是否有更好的方法来获取classAvar的值(在ClassA中声明,在调用ClassB中的方法后获得值)
已解决:
好的,经过一些研究和我从daniel.sedlacek那里得到的一个想法,我似乎找到了最适合我需要的解决方案
B类:
private static var _instance:ClassB;
public function ClassB() { // constructor
_instance = this;
}
public static function get FUN_GetInstance():ClassB {
return _instance;
}
StaticRegister.assign(this);
在C类中:
private var MC_VariablesContainer:ClassB
MC_VariablesContainer:MC_ClassB = ClassB.FUN_GetInstance
(A)
不要这样做,考虑更好的体系结构,它将尊重封装和松耦合
(B)
如果必须这样做,您可以使用静态全局寄存器并将所有阶段实例(如ClassB)分配给它,例如:
B类:
private static var _instance:ClassB;
public function ClassB() { // constructor
_instance = this;
}
public static function get FUN_GetInstance():ClassB {
return _instance;
}
StaticRegister.assign(this);
在静态寄存器中:
publis static var register : Array = [];
public static function assign(instance : Object) : void {
array.push(instance);
}
然后以类似的方式把它弄出来。但这样做真的很肮脏
(C)
如果只有一个ClassB实例,您可以为其提供静态-类似于单例的-访问器:
B类:
private static var instance : ClassB;
publis static function getInstance() : ClassB {
return instance;
}
在构造函数中:
public class ClassB() {
instance = this;
}
更多关于完整单身的信息:或谷歌或维基百科
这仅在访问的变量是公共的或内部的情况下有效,这取决于ClassC是哪个包的一部分。我想知道是否有更好、更干净的方法来实现这一点
这是OOP的基本原则之一。无法获取私有和受保护的属性或方法。如果你想得到它们,你应该将它们公开或内部。最好用另一种方式解决。努力创建封装的和解耦的类通常是好的。发布一些代码,我们可能会提出改进建议:)我本来会发布我正在处理的代码,但它是一个非常复杂的加载程序结构,我相信最终它将是无关紧要的,相反,我将尝试通过一些简单的示例代码(作为编辑问题添加)来概述我正在寻找的内容。谢谢你,乔纳坦!你好,丹尼尔。我有点困惑,主要是关于C)点。“公共静态类”不应该是“公共静态功能”吗?另外,我认为关键字this在静态函数中是不被接受的。是否可能我把它弄糟了:D。我很忙,修正了,对不起:)我注意到你的编辑,然后你对下一个回答的人的评论:D。谢谢你的信息!