什么是最简单的&在javascript中从回调内部访问外部的最短路径?

时间:2011-04-19 02:40:39

标签: javascript callback this-keyword

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


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

但我不想为同一个对象使用两个变量名(例如,this和that) 而且我不想在每节课上反复写var that = this
我认为以下代码使用_this而不是更简单。


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

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

2 个答案:

答案 0 :(得分: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的完整版本让你传入参数作为第二个参数,它们可以用来代替,插入或附加到经常传递给你的函数的参数列表中正在创建

的代表

答案 1 :(得分: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,现在生锈了