代码之家  ›  专栏  ›  技术社区  ›  futuraprime

属性的定义未定义(1120错误)

  •  0
  • futuraprime  · 技术社区  · 15 年前

    我的ActionScript中出现了一个非常奇怪的未定义错误(代码在此简化):

    package {
        public class Main extends Sprite {
            private function Test() {
                var testVar:Number = 10;
            }
        }
    }
    

    这将返回一个错误: 1120: Access of undefined property testVar

    如果我读对了,它会抱怨我试图定义的变量还没有被定义。因此我感到困惑。

    当函数测试之前有一个巨大的对象声明时,这一切都起到了作用,但是现在我已经将它移动到了一个单独的类中,对于类的每个方法中的每个变量声明,我都会得到这个错误。


    更新:

    结果是,最后添加的类定义导致了这个问题——但我不知道为什么。

    class A {}
    class B {}
    

    到.as文件结尾时,导致发生所有错误,但仅包括 class A {} class B {} 使所有的错误消失。

    更令人困惑的是,更好的解决方案是:

    class C {}
    class A extends C {}
    class B extends C {}
    

    1 回复  |  直到 15 年前
        1
  •  1
  •   sberry    15 年前

    所以,我假设你用的是CS4,对吗?CS4编译器中存在一个不允许您执行此操作的错误。。。假设您将任何内容声明为局部变量。您可以将testVar设置为类实例变量,这样就可以了。

    如果您想在包之外添加一个类,那么您可以这样做,并且仍然使用局部变量。但是,添加第二个将使编译器阻塞。

    顺便说一句,这在CS3中确实有效,但在将其用于帮助器类(包中的主类将使用的类)时,通常认为这是一个坏主意。我唯一使用它的时间是用于声明一个类,该类将用作singleton构造函数的参数,例如:

    package {
    
        public class MySingletonClass extends Object {
    
            private static var _instance:MySingletonClass ;
    
            public function MySingletonClass ($singletonEnforcer:SingletonEnforcer) {}
    
    
            public static function getInstance(): MySingletonClass{
                if (MySingletonClass._instance == null) {
                    MySingletonClass._instance = new MySingletonClass(new SingletonEnforcer());
                }
                return MySingletonClass._instance;
            }
    
    
            public static function get instance(): MySingletonClass{
                return MySingletonClass.getInstance();
            }
        }
    }
    
    class SingletonEnforcer extends Object {
        public function SingletonEnforcer() {}
    }