这是从复杂类中提取的玩具示例:
public class MyClass {
public function MyClass() {
trace('Created');
}
public static function makeObjectAsync(callback:Function):void {
inner();
function inner():void {
var object:MyClass = new MyClass(); // line 10
callback(object);
}
}
}
调用静态函数后:
MyClass.makeObjectAsync(function(object:Myclass):void { ... })
以下运行时异常发生在第10行:
TypeError: Error #1007: Instantiation attempted on a non-constructor.
为什么会这样,我该怎么办?
似乎new (MyClass)()
有效。现在我可能更困惑了。
答案 0 :(得分:1)
不清楚为什么要成为最诚实的人。它与匿名函数继承的范围有关,具体取决于它们的声明方式。
我有两个解决方案。
如果你的makeObject方法不是静态的,那就可以了。
以其他方式声明您的匿名函数:
public static function makeObjectAsync(callback:Function):void {
var inner : Function = function():void {
var object:MyClass = new MyClass();
callback(object);
};
inner();
}
答案 1 :(得分:0)
您不应该调用变量“对象”。为什么要嵌套你的内在功能?你为什么不这样做:
public static function makeObjectAsync(callback:Function):void {
callback(new MyClass());
}
或者如果你真的想要那个嵌套函数:
public static function makeObjectAsync(callback:Function):void {
inner();
function inner():void {
callback(new MyClass());
}
}
你不能再次回想起类的构造函数,使用在构造函数中调用的函数然后再次调用它。有了这个,你不是引用构造函数,而是创建类的新实例。