Actionscript 3 如何在不扩展或实例化的情况下访问类的属性和方法?

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.

假设我有一个定义的ClassA。 ClassB扩展了ClassA,舞台上有一个电影剪辑实例链接到ClassB

在不扩展ClassB或创建新的ClassB实例的情况下,ClassC如何访问ClassB的属性和方法?

我目前的做法是引用链接到ClassB的stage实例,然后使用点语法访问ClassB实例变量,这仅在访问的变量是公共变量或内部变量时有效,具体取决于ClassC是哪个包的一部分。我想知道是否有更好、更干净的方法来实现这一点

编辑:代码示例

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。谢谢你的信息!