帮你搞定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岁,我叫熊猫

猜你喜欢

转载自blog.csdn.net/qq_28004379/article/details/82783735