避免JavaScript在XBL中遇到的“此”错误的最佳方法
-
12-10-2019 - |
题
谈论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
成员,以及如何束缚 foo
和 bar
.
本质上,我采用了一个不接受参数的函数,并生成了另一个功能,该功能将确保第一个始终以正确的方式调用 this
多变的。活动处理程序的理想选择。
(对不起,但是我对XBL一无所知,所以我希望这将被使用。)
其他提示
如果没有最佳答案,则可以使用JavaScript文件而不是XBL进行实现。查看Xulrunner源代码,看起来大多数代码都可以做到这一点。
但是,如果有一种方法可以很好地工作,我仍然想使用XBL。