0

我知道下面的代码可以访问外部 this。


var o = function() {
    var that = this;
    this.a = 1;
    $('html').click(function() {
        alert(that.a);
    });
}
new o();

但我不想为同一个对象使用两个变量名(例如,这个和那个)。
而且我不想var that = this在每节课上重复写。

我认为以下使用 _this 而不是 that 的代码更简单一些。


var o = function() {
    var _this = this;
    this.a = 1;
    $('html').click(function() {
        alert(_this.a);
    });
}
new o();

但是还有其他更简单、更短的方法吗?

4

2 回答 2

1

我真的很喜欢 Ext 的createDelegate函数,它可以让您在this创建任何函数时为其设置值。

createDelegate这是您可以在页面中包含的功能较少的版本:

Function.prototype.createDelegate = function(thisObj) {
    var method = this;
    return function() {
        return method.apply(thisObj || window, arguments);
    };
}

这是您在示例中使用它的方法,从不设置this变量:

var o = function() {
    this.a = 1;
    $('html').click(function() {
        alert(this.a);
    }.createDelegate(this));
}
new o();

Ext 的完整版本createDelegate让您将参数作为第二个参数传递,它们可以用来代替、插入或附加到参数列表中,这些参数将定期传递到您正在创建的委托的函数中

于 2011-04-19T02:51:18.660 回答
0

这是一些类似的代码,但我相信它比您的示例“更安全”,如果您创建 1 个以上的 'o' 实例,每个实例都可以更新 'a' 属性

var bar = function() {
        var that = {};
        that.a = 1;
        that.showA = function () {
            $('html').click(function() {
                alert(that.a);
            });
        };
        return that;
}
var instanceOfBar = bar();
instanceOfBar.showA();

我可能在这里离开基地,几个月没有接触过javascript,现在生疏了

于 2011-04-19T02:49:28.983 回答