1

我将把它作为错误报告提交,但我想检查这里是否有人能看出我正在做的事情有什么问题。

当您通过 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),所以我的解决方法并不可靠。

4

1 回答 1

4

如果你想要一个便携式bind的,它很简单:

var that = this;
return $entry(function() {
   return that.@com.test.Foo::instanceFunction()();
});
于 2012-11-20T14:01:28.137 回答