函数的四种调用模式==>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 指向,从第二个参数开始往后,每个参数被依次传入给被调用的函数。

posted @ 2020-08-16 14:41  MIKE-CHOW  阅读(156)  评论(0)    收藏  举报