Haxe Javascript:在不使用Reflect的情况下通过名称获取和设置属性

时间:2016-05-10 10:23:15

标签: javascript properties haxe tween

我希望能够在不使用Reflect API的情况下按名称设置和获取属性值。 我正在制作某种补间引擎,为数百个对象设置动画,对函数Reflect.getPropertysetProperty的调用占用了相当多的CPU时间。

有没有办法绕过Reflect API而不必在我的Haxe代码中注入原始javascript? (因此它也可以在除js之外的其他平台上使用)

所以不要这样做:

finalValue = Reflect.getProperty(object, propertyName);

我希望能够做到这一点:

finalValue = object[propertyName];

感谢。

2 个答案:

答案 0 :(得分:1)

untyped怎么样?

    // set
    untyped object[propertyName] = 15;

    // get
    var value = untyped object[propertyName];

亲自尝试:http://try.haxe.org/#5b61e

  

警告进行无类型操作会让您省略类型系统,并且更容易出错。如果您使用具有Haxe属性(getter / setter)的实例,则可能会产生意外结果。这就是为什么使用Reflect被视为更安全

答案 1 :(得分:1)

使用"无类型"时需要小心。具有getter / setter和标准属性的属性,因为调用略有不同。 例如:

// set
untyped object["set_" + propertyName] = 15;

// get
var value = untyped object["get_" + propertyName];

通常我们对补间库执行的操作是在映射属性时检查它是否为getter / setter并存储此信息以供运行时使用。