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

显式键入变量会使编译器认为内置类型的实例没有属性,而该实例没有属性。

  •  0
  • Ponkadoodle  · 技术社区  · 16 年前

    我将导致AS3编译器错误1119的原因缩小到与此类似的代码:

    var test_inst:Number = 2.953;
    trace(test_inst);
    trace(test_inst.constructor);
    

    我得到错误“1119:通过带有静态类型号的引用访问可能未定义的属性构造函数。”

    现在,如果省略变量的类型,就不会得到错误:

    var test_inst = 2.953;
    trace(test_inst);
    trace(test_inst.constructor);
    

    它产生预期输出:

    2.953
    [class Number]
    

    那是怎么回事?我喜欢显式地键入变量,所以除了不提供变量的类型之外,还有什么方法可以解决这个错误吗?

    3 回复  |  直到 16 年前
        1
  •  3
  •   back2dos    16 年前

    好吧,这有点难以解释…首先,它是如何工作的:

    var test_inst:Number = 2.953;
    trace(test_inst);
    trace((test_inst as Object).constructor);
    

    据我所知,这是因为 constructor 来自ActionScript3的ECMAScript特性。它是 Object 实例并通过继承 prototypes . 从严格类型化的ActionScript3(它也使用不同的继承机制)中,该属性因此不可用。

    尔兹
    后台操作系统

        2
  •  0
  •   jonathanasdf    16 年前

    http://www.kirupa.com/forum/showpost.php?p=1951137&postcount=214

    有你需要的所有信息:)

    基本上,trace(test_inst[“constructor”])可以工作。

        3
  •  0
  •   ansiart    16 年前

    对象(someobject).constructor将实现相同的事情——而您不必处理编译器问题。

    对象(someinst)===someClass也可以工作。

    DH