call()和apply()
- 这两个方法都是函数对象的方法,都需要函数来调用
- 当对函数call()和apply()都会调用函数执行
- 在调用call()和apply()可以将一个对象指定为第一个参数(此时指定的对象成为函数执行时的this)
- call()可以将实参在对象之后依次传递
fn.call(obj,a,b) - apply()需要将实参封装到一个数组中统一传递
fn.apply(obj,[a,b])
this的情况
- 以函数的形式调用时,this永远都是window;
- 以方法的形式调用时,this是调用方法的对象;
- 以构造函数的形式调用时,this是新创建的那个对象
- 使用call和apply调用时,this是指定的那个对象
arguments
在调用函数时,浏览器每次都会传递两个隐含参数:
- 函数的上下文对象this
- 封装实参的对象arguments
- arguments是一个类数组对象,它可以通过索引来操作数据,也可以获取长度
- 在调用函数时,我们所传递的实参都会在arguments中保存
- arguments.length可以用来获取实参的长度
- 我们即使不定义形参,也可以通过arguments来使用实参,arguments[0]表示第一个实参,以此类推
- 它里面还有一个callee属性,这个属性对应一个函数对象,就是当前正在指向的函数的对象
函数的prototype属性
- 每个函数都有一个prototype属性,它默认指向一个object空对象(即称为:原型对象)
- 原型对象中有一个constructor,它指向函数对象
给原型对象添加属性(一般都是方法)
- 作用:函数的所有实例对象自动拥有原型中的属性(方法)