AS3 TypeError:错误#1007:尝试对非构造函数进行实例化

时间:2012-06-13 07:25:25

标签: actionscript-3 static typeerror

出于某种原因,我无法使其工作(严重简化的代码失败):

package com.domain {
    public class SomeClass {
        private static var helper:Helper = new Helper();
    }
}

class Helper {
}

它会编译,但会在首次访问SomeClass时抛出:

TypeError: Error #1007: Instantiation attempted on a non-constructor.
    at com.domain::SomeClass$cinit()
    ...

4 个答案:

答案 0 :(得分:2)

非构造函数错误是编译器尴尬的说法“你已经为我尚未见过的类调用了构造函数”;如果它有点聪明,它可以在抱怨之前检查内部类的文件(编译单元)... mehhh

看到你已经给出了静态变量private访问权限,显然你打算只在SomeClass内部使用实例(假设;可以作为返回值传递)。

以下解决方案将静态var的创建推迟到初始化内部类时,即调用(可能是隐含的)Helper.cinit()时,而不是SomeClass.cinit() Helper还不存在

package com.domain {
    public class SomeClass {

        public function doSomething(param:*):void {
            // ... use Helper.INSTANCE
        }

    }
}

class Helper {
    public static const INSTANCE:Helper = new Helper();
}

答案 1 :(得分:1)

我认为它在同一个文件中无法与Helper和SomeClass一起使用。 初始化SomeClass时,Helper类尚未初始化,因此无法创建Helper对象。

将Helper移动到单独的文件应该可以解决问题。

答案 2 :(得分:1)

达伦的+1。另一种选择是将Helper类移到文件顶部

class Helper {
}

package com.domain {
    public class SomeClass {
        private static var helper:Helper = new Helper();
    }
}

答案 3 :(得分:0)

你需要生成一个构造函数并在类中声明你的变量,而不是函数:

package com.domain { 
    public class SomeClass { 
        private static var helper:Helper 
        public function SomeClass() {
           helper = new Helper(); 
        }
    } 
} 

class Helper { 
}