1、call()
- 语法:.call(obj,arg1,arg2,....)
- obj:这个对象将代替Function里面的this对象
- args:这是一个参数列表
- 可以有多个参数, 第二个参数及第二个参数之后可以传入任何类型
例子1:
例子2:
例子3:
2、apply()
- 只有两个参数, 第二个参数必须传入一个数组
- 语法:apply(obj,array)
- obj:这个对象将代替Function里面的this对象
- args:这是一个数组,它将作为参数传给Function(args--> arguments)
例子1:
例子2:
注意:如果call和apply的第一个参数写的是null,那么this指向的是window对象
例子:
总结:
- 每个函数都包含两个非继承而来的方法:call()方法和apply()方法。
- 相同点:这两个方法的作用是一样的,都是在特定的作用域中调用函数,等于设置函数体内this对象的值,以扩充函数赖以运行的作用域。
- 一般来说,this总是指向调用的某个方法的对象,但是使用call()和apply()方法时,就会改变this的指向。
3、bind()
- bind()方法和call、apply方法有些不同,但是不管怎么说它们都可以用来改变this的指向。
- bind()方法返回的是一个修改过后的函数
例子:
- bind()方法也可以有多个参数,并且参数可以执行的时候再添加,但是要注意的是,参数是按照形参的顺序进行的
例子:
总结:
call和apply都是改变上下文中的this并立即执行这个函数,bind方法可以让对应的函数想什么时候调用就什么时候调用,并且可以将参数在执行的时候添加,这是它们的区别,根据自己的实际情况来选择使用。