我将把它作为错误报告提交,但我想检查这里是否有人能看出我正在做的事情有什么问题。
当您通过 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);
}-*/;
这也可以看作是偏好,有些人可能更喜欢功能保持未绑定。我会说当前的功能是不直观且不必要的。我无法想象this
在 Java 代码中直接使用 unbound 的用例。此外,一些浏览器没有实现bind(1)
,所以我的解决方法并不可靠。