幫你搞定JS混淆的apply,call,bind~~

this對象指向會經常改變的,這會造成一些意想不到的影響。JavaScript提供了callapplybind這三個方法,來切換/固定this的指向。

首先說說他們三個之間的區別~

相同點:

1、apply 、 call 、bind 三者都是用來改變函數的this對象的指向的;

2、apply 、 call 、bind 三者第一個參數都是this要指向的對象,也就是想指定的上下文;

3、apply 、 call 、bind 三者都可以利用後續參數傳參;

不同點:

1、bind 是返回對應函數,便於稍後調用;apply 、call 則是立即調用 。

2、call與apply接受參數的方式不太一樣

搞起來搞起來,代碼走一波:

var Dog=function(){};
Dog.prototype={
  name:'PiTe',
  age:1,
    say:function(name,age){
      alert(this.name+"的年齡是"+this.age)
    },
    myName:function(name,age){
      alert("我今年"+age+"歲,我叫"+name)
    }
}
var cat={
  name:'咪咪',
  age:'3'
}
let dog=new Dog('PiTe',1);
dog.say();//PiTe的年齡是1

//bind後面加()讓其執行
dog.say.call(cat)//咪咪的年齡是3
dog.say.apply(cat)//咪咪的年齡是3
dog.say.bind(cat)()//咪咪的年齡是3

/*---參數[注意apply是數組]---*/
var other={}
dog.myName.call(other,'老虎',5)//我今年5歲,我叫老虎
dog.myName.apply(other,['兔子',4])//我今年4歲,我叫兔子
dog.myName.bind(other)('熊貓',6)//我今年6歲,我叫熊貓

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章