2016-05-10 109 views
2

我希望能夠通過其名稱設置屬性值,而無需使用Reflect API。 我正在製作某種補間引擎,動畫數百個對象,並且調用函數Reflect.getPropertysetProperty佔用相當多的CPU時間。Haxe Javascript:通過名稱獲取並設置屬性,而不使用反射

是否有辦法繞過反映API,而無需注入原料javascript我HAXE裏面的代碼? (所以它也可以在其他平臺上使用的不是JS)

所以不是這樣做的:

finalValue = Reflect.getProperty(object, propertyName); 

我希望能夠做到這一點:

finalValue = object[propertyName]; 

感謝。

回答

1

怎麼樣untyped

// set 
    untyped object[propertyName] = 15; 

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

自己嘗試一下:http://try.haxe.org/#5b61e

警告去無類型可以讓你忽略了類型系統,更容易出錯。如果您使用具有Haxe屬性的實例(getter/setter),它可能會給出意想不到的結果。這就是爲什麼使用Reflect被認爲是更安全

+0

我想避免這種情況,但我想這是迄今爲止最好的解決方案。 非常感謝您的回答! –

1

使用屬性爲getters/setters和標準屬性的「untyped」時需要小心,因爲調用稍有不同。 如:

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

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

通常我們做我們的吐溫庫是什麼做的檢查,前面,當屬性映射,看它是否是一個getter/setter和存儲這些信息用於運行時使用。

+0

好主意,謝謝你的提示! –

相關問題