谈论XBL并不是完全在谈论JavaScript。因此,我将创建与 这个, ,但是现在关于XBL,我不是root JavaScript代码的创建者,而只是绑定中的方法和事件处理程序的创建者。

--

在某些情况下, this 关键字可能不会引用我期望的对象。 (最近的示例: 在关键事件中,在我的XBL中)

避免这种错误的最佳方法是什么?

现在,我一直在使用 getElementById (或者 $.fn 来自jQuery),但我不确定这是否是最好的方法。

- 更新

更多细节:

XBL方法 访问在该元素中定义的元素的唯一方法 XUL 文件(GUI描述文件)不使用“此”(因为我期望的“我期望的”可能不是getElementById,这使代码无法重复使用,所以我正在寻找替代方案。

有帮助吗?

解决方案

正如您在其他地方听到的那样,问题是 this 参数不一定是您首先想到的对象,尤其是当您谈论事件处理程序等时。我发现最好的方法是编写一个小功能,该功能将某些对象绑定为 this 可变并返回另一个使用绑定来调用原始功能的函数。

看一下此代码:

var bindFunction = function(self, f) {
  return function() {
    return f.apply(self);
  };
};

var foo = function() {
  alert(this.hello);
};

var bar = { 
  hello: "Hello there"
};

var boundFoo = bindFunction(bar, foo);
boundFoo();

我拥有的功能称为 bindFunction 这是一个对象(称为 self)和一些功能,并返回另一个功能,该功能将调用应用程序应用程序 self 对象为 this 多变的。

其余代码只是一些测试代码: foo 会警报的功能 this.hello, , 一个 bar 带有A的对象 hello 成员,以及如何束缚 foobar.

本质上,我采用了一个不接受参数的函数,并生成了另一个功能,该功能将确保第一个始终以正确的方式调用 this 多变的。活动处理程序的理想选择。

(对不起,但是我对XBL一无所知,所以我希望这将被使用。)

其他提示

如果没有最佳答案,则可以使用JavaScript文件而不是XBL进行实现。查看Xulrunner源代码,看起来大多数代码都可以做到这一点。

但是,如果有一种方法可以很好地工作,我仍然想使用XBL。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top