我希望能够在不使用Reflect API的情况下按名称设置和获取属性值。
我正在制作某种补间引擎,为数百个对象设置动画,对函数Reflect.getProperty
和setProperty
的调用占用了相当多的CPU时间。
有没有办法绕过Reflect API而不必在我的Haxe代码中注入原始javascript
? (因此它也可以在除js之外的其他平台上使用)
所以不要这样做:
finalValue = Reflect.getProperty(object, propertyName);
我希望能够做到这一点:
finalValue = object[propertyName];
感谢。
答案 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并存储此信息以供运行时使用。