其实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就在后边加()就可以了,是不是很简单呢,今天就到这里了,谢谢大家,我们下次再见!
网友评论