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

Haxe Javascript: get and set property by its name without using Reflect

本文关键字:获取 属性 设置 情况下 Javascript Reflect Haxe      更新时间:2023-09-26

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

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

因此,与其这样做:

finalValue = Reflect.getProperty(object, propertyName);

我希望能够做到这一点:

finalValue = object[propertyName];

谢谢。

untyped怎么样?

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

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

警告取消类型化可以省略类型系统,并且更容易出错。如果使用具有Haxe属性(getter/setters)的实例,可能会产生意外的结果。这就是为什么使用Reflect被认为更安全的原因。

将"untyped"与getter/setter属性和标准属性一起使用时需要小心,因为调用略有不同。例如:

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

通常,我们对tween库所做的是在映射属性时提前进行检查,看看它是否是getter/setter,并存储这些信息以供运行时使用。