幫你搞定JS混淆的apply,call,bind~~
阿新 • • 發佈:2019-02-12
this物件指向會經常改變的,這會造成一些意想不到的影響。JavaScript提供了call
、apply
、bind
這三個方法,來切換/固定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歲,我叫熊貓