一般改变this指向用的都是call、apply、bind这些方法,具体怎么使用看下面的例子吧
call()使用示例
var n=1
var obj={n:20,fu:func
}
function func(name){return this.n+name
}
console.log(obj.fu("我"))
console.log(obj.fu.call(window,"我"))
解释:
在原本的obj.fu()调用时,因为this指向的obj,所以this.n的值为20
而call()方法将this的指向从obj转移到了window,在window对象中有一个window.n=1,所以第二行打印时 this指向的是window
说白了,call()方法第一个参数就是,第一个参数写的什么,就把this指向转移到那个参数
apply()使用示例
跟上面的call()类似
var n=1
var obj={n:20,fu:func
}
function func(name){return this.n+name
}
console.log(obj.fu("我"))
console.log(obj.fu.apply(window,["我"]))
需要注意的一点就是,
call()和apply()相同的就是第一个参数都是this的新指向,而call()方法第二个参数开始之后的参数都是以逗号为间隔的形参,就是传递进函数的,而apply()是用数组来存储形参的。