在引用内部函数自己的构造(Referencing own constructor in inner

2019-10-17 04:42发布

下面是一个复杂的类蒸馏玩具例子:

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)()的作品。 现在,我可能更多的困惑。

Answer 1:

不是太清楚对为什么要进行honnest。 它由匿名函数,这取决于它们是如何继承申报的范围做。

我有2个解决方案,为你虽然。

  1. 如果您makeObject方法不是一成不变的,它会工作。

  2. 声明你的匿名函数的其他方式:

     public static function makeObjectAsync(callback:Function):void { var inner : Function = function():void { var object:MyClass = new MyClass(); callback(object); }; inner(); } 


Answer 2:

你不应该打电话给你的变量“ 对象 ”。 你为什么嵌套的内部函数? 你为什么不只是:

public static function makeObjectAsync(callback:Function):void {
    callback(new MyClass());
}

或者,如果你真的想要一个嵌套函数:

public static function makeObjectAsync(callback:Function):void {
    inner();

    function inner():void {
        callback(new MyClass());
    }
}

你不能再召回类的构造函数,使用被称为在构造函数然后再调用它。 这样,你就不能引用构造函数,但创建类的新实例。



文章来源: Referencing own constructor in inner function