【问题标题】:Haxe Javascript: get and set property by its name without using ReflectHaxe Javascript:在不使用 Reflect 的情况下按名称获取和设置属性
【发布时间】:2016-05-10 10:23:15
【问题描述】:

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

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

所以不要这样做:

finalValue = Reflect.getProperty(object, propertyName);

我希望能够做到这一点:

finalValue = object[propertyName];

谢谢。

【问题讨论】:

    标签: javascript properties haxe tween


    【解决方案1】:

    untyped怎么样?

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

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

    警告 无类型化可以让您省略类型系统并且更容易出错。如果您使用具有 Haxe 属性(getter/setter)的实例,它可能会产生意想不到的结果。这就是为什么使用Reflect 被认为更安全

    【讨论】:

    • 我也想避免这种情况,但我想这是迄今为止最好的解决方案。感谢您这么快回答!
    【解决方案2】:

    在将“无类型”与 getter/setter 属性和标准属性一起使用时需要小心,因为调用略有不同。 例如:

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

    通常,我们对补间库所做的事情是在映射属性时预先检查它是否是 getter/setter 并存储此信息以供运行时使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-10
      • 1970-01-01
      • 2011-06-29
      • 1970-01-01
      • 1970-01-01
      • 2012-03-18
      • 1970-01-01
      相关资源
      最近更新 更多