函数的四种调用模式==>this的指向问题(下)
4.上下文模式(借用方法模式)
任何函数都可以调用call、apply、bind方法。
call( )
1.除了可以使用小括号来调用函数,还可以用call来调用函数

2.call还可以改变函数内的this指向,call方法的第一个参数可以改变this指向

3.call的参数有若干个,第一个参数用来改变this指向,其他参数都是作为被调用函数的实参

call借用方法模式
示例1:

p2对象本身是没有sayHi方法的,是从p1对象“借用”过来的
示例2:

伪数组obj并没用push方法,但是可用从Array的原型上“借用”过来
好处:
push方法可以帮我们实现添加项
push方法会自动维护lenght长度
apply()
apply()方法和call()的作用是一样的,区别在于写法
1.apply语法:apply(thisArg,args)
- thisArg:用于修改函数内this的指向
- args:实参列表,是一个数组或者伪数组
2.apply的平铺性:把第二个参数(数组)中的每一项依次作为被调用方法的实参。
bind()
语法:fn.bind(thisArg)
作用:创建并返回一个新的函数,这个新的函数与fn一模一样,而且返回的函数内的this被固定成了thisArg。
注意:call和apply都有调用函数的作用,但是bind是不会调用函数的
小结
apply与call作用一模一样,区别仅在于传入参数的形式的不同。
apply 接受两个参数,第一个参数指定了函数体内 this 的指向,第二个参数为一个带下标的集合,这个集合可以为数组,也可以为类数组,apply 方法把这个集合中的元素作为参数传递给被调用的函数。
call 传入的参数数量不固定,跟 apply 相同的是,第一个参数也是代表函数体内的 this 指向,从第二个参数开始往后,每个参数被依次传入给被调用的函数。
浙公网安备 33010602011771号