js的call, apply, bind函数的实现,这是老生常谈了,这些都是改变函数执行上下文的函数;今天我也来实现一下。
首先,我们先创建一个对象如图:(注:文中设计到的人名,年龄,纯属虚构)
1:使用call()改变方法里面,this的指向call()方法的第一个参数必须是指定的对象,方法的原有参数,挨个放在后面
obj1.sayHi(100, 2)=》这段话就是文中obj1.sayHi()的调用方法,文中this指向obj1
obj1.sayHi.call(obj2, 200, 100)=》大家好,我是彭于晏,今天32岁200-100 (这个因为我们调用了call()方法,所以this就指向了obj2里面的this就变成了,文中加粗部分)
2:
let obj3 = {
name:'胡歌',
age:35
}
2:使用apply(),也可以改变方法里面this的指向,
第一个参是指定的对象,方法的原有参数,统一放到第二个数组参数中,如下:
obj1.sayHi.apply(obj3,[200,100])=》大家好,我是胡歌,今天35岁200-100
3:使用bind(),也可以改变方法里面this的指向,用法给call()一样
call()是直接运行方法,bind()是返回新的方法,然后再重新调用。
*/
let obj4 = {
name:'胡军',
age:40
}
let str = obj1.sayHi.bind(obj4,200,100)() //这个多出来的加粗的()就是函数调用,相当于console.log(str)