Haxe Javascript:防止'绑定'代?
问题描述:
有没有简单的方法来防止$ bind代传递类成员函数?Haxe Javascript:防止'绑定'代?
我有一个对象,它接受一个将在任意时间间隔内调用的函数。对象在调用函数之前总是将自己绑定为'this'绑定(这是在本地完成的),因此对$ bind的调用本身是不必要的。然而,我似乎无法找到一种简单的方法来防止$ bind被任何时候按值获取成员函数时发出。
我发现的唯一方法是使用__js__与成员函数名称的字符串字面量,我宁愿避免...有没有类型的方式来这样做?或者更好一点?一种仍然使用haxe语法的方法(带标识符而不是字符串文字)?
例子:
private function onSpawn():Void
{
this.setAct(act); // Will generate JS: this.setAct($bind(this,this.act));
// Id like to simply have it generate: this.setAct(this.act);
// Mitigated like this:
this.setAct(untyped __js__("this.act"));
}
private function act(dt:Float):Void
{
...
}
谢谢。
答
您使用宏来掩盖无类型表达式,但这是相当危险的。 对“this”的引用将会失败。
http://try-haxe.mrcdk.com/#70ee4
顺便说一句,我觉得编译器可以进行优化,以不产生$如果绑定的功能代码不涉及“本”。你可能想在github回购中提出一个问题。
+0
这个解决方案对于我的特殊情况已经足够了。当然,比我目前的解决方法更清洁。忘记还有其他形式的宏而不是构建宏。 :)至于你的警告'这个'绑定,理解 - 在我的情况'行为'是从本地调用'this'绑定到对象本身已经。谢谢! –
不确定是否有除修改生成器(ocaml)以外的任何方法。使用$ bind时遇到的问题是什么? – KevinResoL
$ bind在不需要的地方添加了另一个不必要的函数调用。我正在使用JavaScript解释器,这些函数被称为每帧许多对象,这意味着一个不必要的性能影响。 (请参阅https://github.com/svaarala/duktape/issues/1300#issuecomment-273003473)。不仅如此,$ bind还会在每次调用时添加3个属性查找,这也很慢:** f.method.apply(f.scope,..)** –