js的this,bind,call……

weixin_33830216發表於2016-09-22

寫了一段時間js,在this裡虐了一番,寫一點心得:

var a = {do_something: function(){console.log(this)}}
#直接在
function do_something2(){console.log(this)}
#這裡呼叫a.do_something()輸出的是a這個Object,其實就是是找的父級元素
同理直接呼叫do_something2()輸出的則是整個window物件

566308-4c86fba6e6e15de8.png
a.do_something()
566308-be1a91e7a2dc57dd.png
do_something2()

var a = {test: '任意一個東西'}
function do_it(){console.log(this)}
$('#id1').on('click', do_it.bind(a))
#在繫結事件的時候,指定function可以給其指定this,這裡就是給this指定成了a
#當然直接呼叫do_it()方法的時候 this還是window物件~

566308-97dd51bb9861034d.png
bind

在直接call呼叫方法的時候也可以指定this,需要注意的是,call呼叫的function接收的引數是從第二個開始的

566308-10bec97f320d2c0c.png
call

還有就是每個方法/回撥的this都是不一樣的,要傳遞this的時候需要理清思路:
<pre>
var rmAllSysNotice = function(){
var that = this;
var type = this.$notice.attr("data-value");
if(type ==="sys"){
this.deleteAllLocalSysMsgs(function(err,obj){
if(err){
alert("刪除失敗");
}else{
that.cache.setSysMsgs([]);
that.buildSysNotice();
}
})
}else{
this.cache.deleteCustomSysMsgs();
CustomMsg.clear_all(function(){that.buildCustomSysNotice(that)})
}
}
</pre>

相關文章