函数的方法

151 阅读2分钟

call()和apply()

  • 这两个方法都是函数对象的方法,都需要函数来调用
  • 当对函数call()和apply()都会调用函数执行
  • 在调用call()和apply()可以将一个对象指定为第一个参数(此时指定的对象成为函数执行时的this)
  • call()可以将实参在对象之后依次传递fn.call(obj,a,b)
  • apply()需要将实参封装到一个数组中统一传递fn.apply(obj,[a,b])

this的情况

  1. 以函数的形式调用时,this永远都是window;
  2. 以方法的形式调用时,this是调用方法的对象;
  3. 以构造函数的形式调用时,this是新创建的那个对象
  4. 使用call和apply调用时,this是指定的那个对象

arguments

在调用函数时,浏览器每次都会传递两个隐含参数:

  1. 函数的上下文对象this
  2. 封装实参的对象arguments
  • arguments是一个类数组对象,它可以通过索引来操作数据,也可以获取长度
  • 在调用函数时,我们所传递的实参都会在arguments中保存
  • arguments.length可以用来获取实参的长度
  • 我们即使不定义形参,也可以通过arguments来使用实参,arguments[0]表示第一个实参,以此类推
  • 它里面还有一个callee属性,这个属性对应一个函数对象,就是当前正在指向的函数的对象

函数的prototype属性

  • 每个函数都有一个prototype属性,它默认指向一个object空对象(即称为:原型对象)
  • 原型对象中有一个constructor,它指向函数对象

给原型对象添加属性(一般都是方法)

  • 作用:函数的所有实例对象自动拥有原型中的属性(方法)