从JSNI链接到GET实例方法不会自动绑定“this”

时间:2012-11-20 13:39:33

标签: gwt jsni

我打算将此作为错误报告提交,但我想检查一下这里是否有人可以看到我正在做的事情。

当您通过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),因此我的解决方法并不健全。

1 个答案:

答案 0 :(得分:4)

如果您想要便携式bind,它就像以下一样简单:

var that = this;
return $entry(function() {
   return that.@com.test.Foo::instanceFunction()();
});