3

我有一堂课:

function RustEditor() {

this.init = function() {

    var saveButton = this.container.find("button.saveButton");
    saveButton.click(function(){this.save();});

};
...

当我单击按钮时,它抱怨 this.save 不是一个函数。这是因为这里的“this”不是指RustEditor 的实例,而是指按钮。我可以在回调闭包中使用什么变量来指向 RustEditor 的实例?我可以使用 rust.editor (它是全局范围内的名称),但那是臭代码。

4

2 回答 2

12

常见的做法是将this值括起来,如下所示:

 function RustEditor() {

 this.init = function() {
    var self = this;

    var saveButton = this.container.find("button.saveButton");
    saveButton.click(function(){self.save();});

 };

根据 tvanfosson 的建议进行更新this调用事件处理程序时会反弹,因此您需要在创建对象时捕获对类的引用,该变量将在闭包中保留该引用。

于 2009-07-14T21:13:48.747 回答
1

在 RustEditor() 中,您可以首先复制对按钮的引用并使用它。

于 2009-07-14T21:14:32.630 回答