我知道下面的代码可以访问外部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了,所以现在生锈了