Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
haxejavascript:Prevent'$绑定&x27;一代_Javascript_Function_Bind_Haxe - Fatal编程技术网

haxejavascript:Prevent'$绑定&x27;一代

haxejavascript:Prevent'$绑定&x27;一代,javascript,function,bind,haxe,Javascript,Function,Bind,Haxe,在传递类成员函数时,是否有一种简单的方法来防止生成$bind 我有一个对象,它接受一个函数,该函数将在任意间隔内被调用。在调用函数之前,对象总是将自身绑定为“this”绑定(这是在本机端完成的),因此不需要调用$bind本身。然而,我似乎找不到一种简单的方法来防止在任何时候通过值获取成员函数时发出$bind 我发现的唯一方法是使用\uuuujs\uuu和成员函数名的字符串文字,我宁愿避免使用。。。有没有打印的方法?还是更好的?仍然使用带有标识符的haxe语法而不是字符串文字的方法 例如: pri

在传递类成员函数时,是否有一种简单的方法来防止生成$bind

我有一个对象,它接受一个函数,该函数将在任意间隔内被调用。在调用函数之前,对象总是将自身绑定为“this”绑定(这是在本机端完成的),因此不需要调用$bind本身。然而,我似乎找不到一种简单的方法来防止在任何时候通过值获取成员函数时发出$bind

我发现的唯一方法是使用\uuuujs\uuu和成员函数名的字符串文字,我宁愿避免使用。。。有没有打印的方法?还是更好的?仍然使用带有标识符的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”的引用都将失败


顺便说一句,我认为如果函数代码不涉及“this”,编译器可能会优化为不生成$bind。您可能希望在github repo中提出一个问题。

不确定除了修改生成器(ocaml)之外是否还有其他方法。$bind的具体问题是什么?$bind在不需要的地方添加了另一个不必要的函数调用。我使用的是javascript解释器,许多对象的每一帧都会调用这些函数,这意味着不必要的性能损失。(见附件)。不仅如此,$bind在每次调用时还添加了3个属性查找,这也很慢:f.method.apply(f.scope,…)这个解决方案对于我的特殊情况已经足够了。当然比我现在的工作环境干净多了。忘记了除了生成宏之外还有其他形式的宏。:)至于您关于“this”绑定的警告,请理解——在我的例子中,“act”是从本机端调用的,本机端已经将“this”绑定设置为对象本身。非常感谢。