我希望我能正确理解你的问题。因为你说它的方式有点介意-f*** XD。
但据我了解。我将回答你的问题,如“我们用这个that
技巧做什么?”。
所以这里是一个完全健康的对象。
var myobject = {
firstMethod : function(){
this.secoundMethod(); // calls the other method
},
scoundMethod : function(){
return 'hi from method 2' ;
}
}
现在我想做一些 jquery 魔术(或任何其他具有回调功能的东西)。我打算使用 jQuery,但可以随意做其他事情。
var myobject = {
firstMethod : function(){
var _this = this ;
this.secoundMethod(); // calls the other method
$('.myClass').animate({'width':300} , 300 , function(){
// this is a call back functon which will be called as soon as the animation ends
// the problem is that if i call @var : `this` , it wont work because im in
// another scope other than the firstMethod .
// so the following will throw an error .
this.secoundMethod(); // error
// to solve this you need the @var : `that` , or in my case i love it to be _this
_this.scoundMethod() // this will work .
})
},
scoundMethod : function(){
return 'hi from method 2' ;
}
}
所以主要_this
(在我的情况下)用于范围 things 。所以我可以访问其他范围内的对象范围。老实说,我在其他地方使用过这个技巧(在 99% 的情况下);
即使剩下的 1% 基本上也是相同的想法,但嵌套更深,或者有很多闭包之类的东西。
这有多危险?!
嗯,这取决于你有多聪明。这是另一个大脑示例
var myobject = {
firstMethod : function(){
var _this = this ,
someObject : {
firstMethod : function(){
this.scoundMethod(); // if you log this you will get 'the wrong method'.
_this.scoundMethod(); // in here you get 'hi from method 2'.
},
scoundMethod : function(){
return 'the wrong method';
}
};
},
scoundMethod : function(){
return 'hi from method 2' ;
}
}
如您所见,这很危险,不是因为它不起作用,而是因为它起作用的恐惧 id。因为如果你有类似命名的函数并且你有一个错过的范围,你最终会花费数小时的时间进行挖掘。如果你没有那个..你会得到一个很好的错误,你可以立即修复
这能走多久。
你可以随心所欲地筑巢吗?但有后果(很少吧?!)。享受以下内容,不要在家里尝试。
var myobject = {
firstMethod : function(){
var _this = this ,
someVar = [1 , 2 , 3 ] ;
this.scoundMethod(function(){
var that = this;
$.each(someVar,function(elementName){
var them = this;
$('.'+elementName).animate({} , 300 , function(){
console.log(them) // logs the element
console.log(_this.scoundMethod()) // logs 'hi from method 2'
})
})
}
},
scoundMethod : function(){
return 'hi from method 2' ;
}
}
其他资源:
希望我已经简单了。而且我没有回答错误的问题。