什么是最简单的&;在javascript中从内部回调访问外部回调的最短方法?
我知道以下代码可以访问此外部。什么是最简单的&;在javascript中从内部回调访问外部回调的最短方法?,javascript,callback,this-keyword,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而不是that的代码稍微简单一点。 var o =
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();
但是还有其他更简单、更短的方法吗?这里有一些类似的代码,但我相信它“更安全” 如果您创建了多个“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了,所以现在生锈了我真的很喜欢Ext的
createDelegate
函数,它让你在创建任何函数时设置这个
值
下面是一个功能性较差的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
让我们将参数作为第二个参数传入,它们可以用来代替插入,或者附加到参数列表中,这些参数将定期传递到您正在创建其委托的函数中我看不出这比那更简单,同意,“那”似乎是标准方式,为什么要反抗?我很抱歉,但我认为这个比那个简单,因为这个.a和这个.a都可以用这个来搜索。如果我用它代替这个,我必须用它搜索两次。我不想搜索两次。每个实例如何更新“a”属性?我认为新操作符为每个实例提供了它自己的属性,并且它们从不被彼此更新。但是用它来代替这个很简单。谢谢。啊,是的,你是对的,我在读了“Javascript:the good parts”之后就不再尝试使用新关键字了,这篇文章对新关键字的使用有一些有趣的评论-谢谢你介绍这篇有趣的文章。我真的不知道我应该使用新的还是还没有,因为我缺乏对原型的理解。在我看来,只使用<代码>的代码比使用三个关键字的代码更简单(那
这
新
)。但是我认为只使用that
是解决从内部回调函数访问外部this
的问题的非常好的方法。因此,我将编写var=this;a=1/*不是这个。a=1*/*并且不返回那个(使用new来实例化)*/
。