0

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

--

在某些情况下,this关键字可能不是我期望的对象。(最近的例子:在一个关键事件中,在我的 XBL 中)

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

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

- 更新

更多细节:

XBL 方法中,访问Xul文件(GUI 描述文件)中定义的元素而不使用“this”(因为它可能不是我期望的“this”)的唯一方法是使用 getElementById,这使得代码不可重用,所以我正在寻找替代品..

4

2 回答 2

1

正如您在其他地方听到的那样,问题在于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带有成员的对象,hello以及如何绑定foobar

本质上,我采用了一个不接受参数的函数并生成了另一个函数,以确保始终使用正确的this变量调用第一个函数。事件处理程序的理想选择。

(对不起,我对 XBL 一无所知,所以我希望这会有用。)

于 2011-01-06T22:25:53.267 回答
0

如果没有最佳答案,一个好的方法是使用 javascript 文件而不是 XBL 来实现。查看 Xulrunner 源代码,看起来大多数代码都是这样做的。

但我仍然想使用 XBL,如果有一种方法可以很好地使用它..

于 2011-01-07T12:31:48.227 回答