我打算将此作为错误报告提交,但我想检查一下这里是否有人可以看到我正在做的事情。
当您通过JSNI从GWT类公开实例方法时,this
在JavaScript中按预期工作。由于我们是交叉编译Java,我希望this
能够自动绑定到实例。例如:
package com.test;
class Foo {
public void instanceFunction() {
this.otherFunction() // will cause an error when called from JSNI!
}
public void otherFunction() {
// does some stuff
}
public native JavaScriptObject getInstanceFunction() /*-{
return this.@com.test.Foo::instanceFunction();
}-*/;
}
目前解决方法是自己绑定函数(不是非常便携):
public native JavaScriptObject getInstanceFunction() /*-{
return this.@com.test.Foo::instanceFunction().bind(this);
}-*/;
这也可以被视为偏好,有些人可能更喜欢这些功能保持不受约束。我想说当前的功能是不合适的,也是不必要的。我无法想象在Java代码中直接使用未绑定的this
的用例。此外,某些浏览器未实现bind(1)
,因此我的解决方法并不健全。
答案 0 :(得分:4)
如果您想要便携式bind
,它就像以下一样简单:
var that = this;
return $entry(function() {
return that.@com.test.Foo::instanceFunction()();
});