1. 程式人生 > >幫你搞定JS混淆的apply,call,bind~~

幫你搞定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歲,我叫熊貓