如何改变this指向?

2019-10-31  本文已影响0人  阿油_爱周周

其实this并不一定是谁调用,指向谁。也可以改变this所指的方向,而改变this指向的方法有三个分别是call、apply、bind那么他们又有什么区别呢,我们一起来看看。

var a = '盲僧'
var arr = {
  name:this.a,
  aa:'猛龙摆尾',
  skill:function(){
    console.log(`${this.name}的大招是${this.aa}`)
  }
}
arr.skill()

这个时候打印出来的是:盲僧的大招是神龙摆尾。那么如何改变this的指向呢,我们继续往下看。

var a = '盲僧'
var arr = {
  name:this.a,
  aa:'神龙摆尾',
  skill:function(){
    console.log(`${this.name}的大招是${this.aa}`)
  }
}
var ss ={
  name:'亚索',
  aa:'狂风绝息斩'
}
arr.skill.call(ss)
arr.skill.apply(ss)
arr.skill.bind(ss)()

现在打印的是压缩的大招是狂风绝息斩,现在只是把this的指向改变为call、apply、bind的第一个参数,只有bind需要在后面加(),其他的并没有什么区别,那么我们接下来继续看。

var a = '盲僧'
var arr = {
  name:this.a,
  aa:'神龙摆尾',
  skill:function(rw,timo){
    console.log(`${this.name}的大招是${this.aa},${rw}可以输${timo}必须死`)
  }
}
var ss ={
  name:'亚索',
  aa:'狂风绝息斩'
}
arr.skill.call(ss,'团战','提莫')
arr.skill.apply(ss,['团战','提莫'])
arr.skill.bind(ss,'团战','提莫')()

这里打印出来的是亚索的大招是狂风绝息斩,团战可以输提莫必须死,当里边放参数的时候我们就可以看出他们三个的区别了,call就和平常一样就可以,apply里边放的是数组,bind就在后边加()就可以了,是不是很简单呢,今天就到这里了,谢谢大家,我们下次再见!

上一篇 下一篇

猜你喜欢

热点阅读