您的位置:首页 > Web前端 > JavaScript

js 四种函数调用模式

2015-07-29 23:42 666 查看
看js语言精粹,还在慢慢啃,啃到了一些之前没想到过的就在博客上记录一下吧。号外一下,工作室的汉子有时候太他妈没有节操了!!你们没节操就算了,当着我的面,这都什么鬼(崩溃中),不说这些没用的,进入正题吧。

调用一个函数会暂停当前函数的执行,传递控制权和参数给新函数。那么新函数会有哪些个参数呢,这就涉及到上节闭包里讲到的活动对象了,每个函数除了声明时定义的形参,还有两个this,arguments。this是个灰常重要的参数咯,它的值取决于调用的模式。在js中一共有4中调用模式:方法调用模式,函数调用模式,构造器调用模式,apply调用模式。

说到这里,怎么调用一个函数呢,就是跟在表达式之后的一对括号(),括号里面可以有一个或多个参数。当实际参数的个数和形参个数不匹配时,不会导致运行时错误。如果实参过多了,超出部分被忽略,如果实参过少了,确实的被代替为undefined。对传进去的实参不会进行类型检查,任何类型的值都可以传进函数。好,题外话也补充完毕,讲讲四个模式吧。

  1.方法调用模式

   当一个函数被保存为对象的一个属性时,我们称它为一个方法。当一个方法被调用时,this被绑定到该对象。如果调用表达式包含一个提取属性的动作(即包含一个.或者[]),那么它就被当做一个方法来调用。因为this被绑定到这个对象,所以方法可以使用this访问自己所属的对象,所以能从对象中取值或者进行修改。this对对形象的绑定发生在调用的时候,通过this取得所属对象的上下文的方法称为公共方法。

2.函数调用模式

当一个函数并非一个对象的属性时,就被当做一个函数来调用。

      比如var sum = add(3,5);

    这种模式调用函数时,this被绑定到全局对象。这种设计模式导致内部函数被调用时,this理想是应该绑定到外部函数的this,可是非常遗憾,它的this是等于全局的window。这种模式导致方法不能利用内部函数来帮助工作,不能共享该方法对对象的访问权。说归说,问题还是要解决的,那么怎么解决呢。就是该方法(外部函数)定义一个变量并把它赋值给this,即that = this,那么内部函数就可以通过that来访问到外部函数的this。也是一个通俗的好方法。

3.构造器调用模式

这个调用模式跟原型有关,原型啊前面讲过了的这里就不啰嗦了。如果正在一个函数前面带上new调用,那么背地里将会创建一个连接到该函数的prototype成员的想你对象,同时this会被绑定到那个新对象上。构造器函数,就是创建的目的就是为了提供new调用的一个函数吧。

4.apply调用模式

apply方法接受两个参数传递给调用函数,一个是要绑定给this的值,还有一个是参数数组。array本质就是改变一个方法或者对形象的作用域,改变它的this值,再给它传参数。如果第一个参数传null/undefined时,代表this就是全局的,等于window.

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: