1

这是一个从复杂类中提炼出来的玩具示例:

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)()行得通。现在我可能更困惑了。

4

2 回答 2

1

不太清楚为什么要诚实。它与匿名函数继承的范围有关,具体取决于它们的声明方式。

不过,我有 2 个解决方案给你。

  1. 如果您的 makeObject 方法不是静态的,它会起作用。

  2. 以另一种方式声明您的匿名函数:

    public static function makeObjectAsync(callback:Function):void {
        var inner : Function = function():void {
            var object:MyClass = new MyClass();
            callback(object);
        };
    
        inner();
    }
    
于 2012-08-24T16:49:15.423 回答
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());
    }
}

而且您无法再次调用该类的构造函数,请使用在构造函数中调用的函数然后再次调用它。有了这个,您不是引用构造函数,而是创建类的新实例。

于 2012-08-24T16:20:38.153 回答