我知道以下代码可以访问外部。
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();
但是还有其他更简单和更短的方法吗?
答案 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,现在生锈了