javascript 函数的四种调用模式,及此时this代表值

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);
}

猜你喜欢

转载自blog.csdn.net/kzcming/article/details/80342797