首先介绍一下call和apply方法的工作流程
call的工作流程
F.call(thisarg,[arg1……])
1、先判断F是否为一个函数,如果不是一个函数,那么将抛出TypeError异常。
2、创建一个内部类型空列表list
3、然后如果参数除去thisarg外还有其他参数的话,就将这些值添加到list中
4、Iangthisarg和list作为F内部属性[[Call]]的参数传入调用进行函数的执行操作
apply的工作流程
F.apply(thisarg,argList)
1、先判断F是否为一个函数,如果不是一个函数,那么将抛出TypeError异常。
2、创建一个内部类型空列表list
3、如果argList为null或者undefined的话不做什么。
4、否则,就将argList中的成员添加到list中,仅仅是成员,即使argList成员为另一个数组
5、让thisarg和list作为F内部属性[[Call]]的参数传入调用进行函数的执行操作
call和apply方法的相同点和不同点
1. 每个函数都包含两个非继承而来的方法:call()方法和apply()方法。
2. 相同点:这两个方法的作用是一样的。
都是在特定的作用域中调用函数,等于设置函数体内this对象的值,以扩充函数赖以运行的作用域。
一般来说,this总是指向调用某个方法的对象,但是使用call()和apply()方法时,就会改变this的指向。
网友评论