1. call和apply
函数对象的方法,通过函数对象调用。
这两个方法都是函数对象的方法,需要通过函数对象来调用,当对函数调用call()和apply()都会调用函数执行。
在调用call()和apply()可以将一个对象指定为第一个参数:
- 此时这个对象将会成为函数执行时的this
- call()方法可以将实参在对象之后依次传递,apply不行。
- apply()方法需要将实参封装到一个数组中统一传递
this的情况(总结):
- .以函数形式调用时,this永远都是window
- 以方法的形式调用时,this是调用方法的对象
- 以构造函数的形式调用时,this是新创建的那个对象
- 使用call和apply调用时,this是指定的那个对象
2. argument
在调用函数时,浏览器每次都会传递进两个隐含的参数:
函数的上下文对象 this
封装实参的对象 arguments
- arguments是一个类数组对象,它也可以通过索引来操作数据,也可以获取长度。
- 在调用函数时,我们所传递的实参都会在arguments中保存
- arguments.length可以用来获取实参的长度,我们即使不定义形参,也可以通过arguments来使用实参:
- arguments[0] 表示第一个实参
- arguments[1] 表示第二个实参 。。。
- 它里边有一个属性叫做callee,这个属性对应一个函数对象,就是当前正在指向的函数的对象