javascript 函数有四种调用方式,每次读jquery源码时有一堆this.调用方法,也不是很好跟踪
1.方法调用模式
1.定义:当一个函数别保存为对象的一个属性时,我们称这个函数为方法,
2 此时this的值 : 当一个方法被调用时,this 被绑定到该对象上
3.如果调用表达式包含一个提取表达式 如 .或 [] ,那么它就是被当作一个方法来调用
2.函数调用模式
1.当一个函数并非一个对象的属性时,那么它就是被当作一个函数来调用的 ,举例:var sum = add(3,4)
2.此时this 的值: 以此模式调用时,函数就是被绑定到全局变量上
3.构造器调用模式
1.如果一个函数前面带上new 来调用,那么背地里将会创建一个连接到该函数的prototype属性的新对象,同时this会绑定到那个新对象; 举例 :var tarr = new Array();
2.new 前缀也会改变return 语句的行为
3.一个函数如果创建的目的就是希望结合前缀new 来使用,那么这个函数就被称为构造器函数,按照约定他们保存在以大写格式命名的变量里
4.Apply 调用模式
1.函数可以有方法
2.apply 方法让我们创建一个参数数值并传递给调用函数,它也允许我们选择this的值,apply 参数接收两个值,第一个是要绑定给this的值,第二个是一个参数数组
5测试例子
构造器这样测试不出来,
函数调用模式为 window对象 ,js 的全局变量
方法调用模式为 Object类型,为对象本身te
apply调用模式,将this指定为Array,此处打印为 function Array() { [native code] } ,
var te = { tef : function (){ console.log("方法调用模式,this的值:"+this); }, name:"zang", } // console.log("构造器调用模式"+((new Array()).this));//构造器调用模式 test(); var ta = ["test"]; te.tef();//方法调用 test2.apply(Array,ta);//apply 调用模式 function test(){ //函数调用 console.log("函数调用模式,this的值:"+this); } function test2(obj){ console.log("apply调用模式,this的值:"+this); }