Javascript 保留;这";在一个变量中,替换为“全部”;这";用这个变量? 上下文
当我使用jQuery时,我经常需要将Javascript 保留;这";在一个变量中,替换为“全部”;这";用这个变量? 上下文,javascript,jquery,coding-style,this,readability,Javascript,Jquery,Coding Style,This,Readability,当我使用jQuery时,我经常需要将这个保存在一个变量中: var obj = { myVar: null, myFunction1: function() { ... }, myFunction2: function() { this.myVar = "blabla"; this.myFunction1(); var ctx = this; $('xxx').click(function () {
这个
保存在一个变量中:
var obj = {
myVar: null,
myFunction1: function() { ... },
myFunction2: function() {
this.myVar = "blabla";
this.myFunction1();
var ctx = this;
$('xxx').click(function () {
ctx.myFunction1();
});
}
}
var obj = {
myVar: null,
myFunction1: function() { ... },
myFunction2: function() {
var ctx = this;
ctx.myVar = "blabla";
ctx.myFunction1();
$('xxx').click(function () {
ctx.myFunction1();
});
//etc. I do it for all "this" even if I have 15 "this"...
}
}
在这种情况下,我用变量替换所有这个:
var obj = {
myVar: null,
myFunction1: function() { ... },
myFunction2: function() {
this.myVar = "blabla";
this.myFunction1();
var ctx = this;
$('xxx').click(function () {
ctx.myFunction1();
});
}
}
var obj = {
myVar: null,
myFunction1: function() { ... },
myFunction2: function() {
var ctx = this;
ctx.myVar = "blabla";
ctx.myFunction1();
$('xxx').click(function () {
ctx.myFunction1();
});
//etc. I do it for all "this" even if I have 15 "this"...
}
}
问题
- 将
此
保存在变量中是否是一种良好的做法?还有别的办法吗
- 用变量替换所有
此是否是一种良好的做法
此
在不同的功能中是不同的。在这种情况下,上下文是不同的
因此,明智的做法是将其保存在一个单独的变量中,这样您就可以确定您正在谈论的是什么上下文
在有子函数的函数中,我建议这样做,而在常规函数中则不建议这样做。那里没有必要
注意:您没有替换它,您只有一个指向正确上下文的指针
还有别的办法吗
是:可以使用匿名自执行函数传递对作用域的引用
myFunction2: function() {
this.myVar = "blabla";
this.myFunction1();
(function(outerscope) {
$('xxx').click(function () {
outerscope.myFunction1();
});
}(this));
}
总之,像您那样存储引用是很好的(至少,这不是一个坏做法),而且它是一种广泛使用的常见做法。我总是使用创建:
var _self = this;
老实说,我不知道这是否是一个最佳实践,但因为我用js编写代码,我看到很多人都这么做,我觉得使用它很舒服
还有别的办法吗
您可以使用:
这显然会覆盖事件处理程序中的this
,因此您无法通过this
访问元素
您还可以将此传递为:
做你认为最容易阅读的事情。我个人只分配var self=this编码>并在嵌套函数内使用self
,在其他任何地方使用此
。这通常是一种可接受的模式,但当函数内有函数(函数内;-)等时,可能会产生混淆
缓解这种情况的一种方法(通常是另一种方法)是将函数绑定到特定的上下文对象。处理此问题,但在web环境中使用可能还不安全
目前,您可以使用:
是的,你可以用你想要和喜欢的任何东西。
$('xxx').click(jQuery.proxy(function () {
this.myFunction1();
}, this));