Actionscript 3 显式键入变量会使编译器认为内置类型的实例不';I don’我没有财产,它确实有

Actionscript 3 显式键入变量会使编译器认为内置类型的实例不';I don’我没有财产,它确实有,actionscript-3,constructor,types,compiler-errors,explicit,Actionscript 3,Constructor,Types,Compiler Errors,Explicit,我将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.

我将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]
那怎么办?我喜欢显式地键入变量,所以除了不提供变量的类型之外,还有什么方法可以解决这个错误吗?

包含您需要的所有信息:)

基本上,跟踪(test_inst[“constructor”])将起作用。

包含您需要的所有信息:)


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

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

var test_inst:Number = 2.953;
trace(test_inst);
trace((test_inst as Object).constructor);
据我所知,这是因为属性
构造函数
来自ActionScript 3的ECMAScript特性。它是
对象
实例的ECMAScript属性,通过继承而来。在ActionScript 3的严格类型世界中(它也使用不同的继承机制),此属性因此不可用

格里茨

back2dos

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

var test_inst:Number = 2.953;
trace(test_inst);
trace((test_inst as Object).constructor);
据我所知,这是因为属性
构造函数
来自ActionScript 3的ECMAScript特性。它是
对象
实例的ECMAScript属性,通过继承而来。在ActionScript 3的严格类型世界中(它也使用不同的继承机制),此属性因此不可用

格里茨
back2dos对象(someobject)。构造函数将实现同样的功能——您不必处理编译器问题

对象(someinst)==someclass也可以工作

dh

对象(someobject)。构造函数将实现同样的功能——而且您不必处理编译器问题

对象(someinst)==someclass也可以工作


dh

没错。如果您在没有严格模式的情况下编译,它也可以工作——这并不是真正推荐的模式。没错。如果您在没有严格模式的情况下编译,它也可以工作——这并不推荐。