最简单的是什么?从javascript内部回调中访问外部this的最短方式



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


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

但是我不想为同一个对象使用两个变量名(例如,this和that)。
我不想每次课都重复写var that = this

我认为下面使用_this代替that的代码更简单一些。


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

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

我真的很喜欢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的完整版本允许您传入参数作为第二个参数,它们可以用来代替,插入或追加到参数列表中,这些参数将定期传递到您正在创建

委托的函数中。

这里是一些类似的代码,但我相信它是'更安全'与您的示例相比,如果您创建了多个'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了,所以现在生锈了

最新更新