javascript的四种函数调用模式

  1. 这些模式影响到this的初始化参数
  2. 每个函数除了接收正常的参数外,另有2个隐含参数:this, arguments
  3. arguments,是函数接收的调用实参,与形参定义的参数个数无关
  4. arguments并不是一个数组,它除了一个length属性外,没有Array的其他任何方法

  • 方法调用模式
    • 当一个函数保存为一个对象的属性时,这个函数是此对象的方法。此时,在方法中使用this指向的是当前这个对象
  •  函数调用模式
    • 当一个函数并非作为一个对象的属性时,这个函数是全局函数。此时,在方法中使用this指向的是全局对象
  • 构造器调用模式
    • 当在一个函数前面使用new操作符,将创建一个隐藏连接到该函数prototype成员的新对象。此时,this指向这个新对象
    • 使用构造器调用模式的函数定义,建议不要再有return,否则会打断this对象赋值给构造器生成的新对象
    • 之所以有构造器调用模式,是因为作者希望搞出一个面向对象的操作模式来,然而javascript本身又是基于原型链的继承模式
    • 从javascript的实现角度来讲:函数就是对象,函数也是类型,只有函数采用作用域,函数因此成了js世界的一等公民
    • 构造器函数的特点是函数中有this下的属性赋值操作,如果构造器函数没有使用new操作符,这些this下的属性会被放入全局对象window中,造成可怕的全局变量污染
  • apply调用模式
    • 所有的Function都有一个apply方法,apply方法接收2个参数,第一个是指定this对象,第二个是参数数组,用于传给该函数形参
    • 若给Function的原型提供方法,比如Function.prototype定义属性,那么所有的函数就都继承了这个方法,可以直接访问

你可能感兴趣的:(Javascript)