【JavaScript】函数调用的四种形式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cxh6863/article/details/83345362

1、函数调用

this表示全局对象,在web中即window
此方式调用,由于this被绑定到全局对象,当内部函数被调用时,this应该仍然绑定到外部函数的this变量。这个设计错误的后果就是方法不能利用内部函数来帮助它工作,因为内部函数的this被绑定了错误的值(全局对象),所以不能共享该方法对对象的访问权。幸运的是,有一个很容易的解决方案:如果一个对象的方法定义了一个变量并将this赋值给它,那么内部函数就可以通过那个变量访问到外部方法调用的对象。按照约定,我们把那个变量命名为that

var that=this;
(function(){
	that.XXX;
})();
var eat=function(){
}
eat();  //这就是函数调用

2、方法调用

this表示是当前对象
当一个函数被保存为对象的一个属性时,我们称它为一个方法。当一个对象的方法被调用时,this被绑定到调用方法的对象

var person={
	name:"ss",
	setName:function(name){
		this.name=name;
	}
};
person.setName("佟毓婉");
alert(person.name);
//输出结果:佟毓婉

3、构造器调用

this表示当前创建对象
构造器就是构造函数,其执行过程:
①new创建了对象,并开辟了空间
②将对象的引用地址传递给函数,在函数中用this接收
③构造方法执行接受,返回this

var Person=function(){
	this.age=19;
	return 123456;
};
var p=new Person();
alert(p);

构造函数改变了函数的返回值,
如果函数的返回值是一个对象,那么就按照返回值来返回,

var Person=function(){
	this.age=19;
	this.name="杜允唐";
	return {};
};
var p=new Person();
alert(p.name);    
//输出结果是:undefined

如果返回值不是一个对象就忽略返回值,直接返回this

var Person=function(){
	this.age=19;
	this.name="周霆琛";
	return "{}";
};
var p=new Person();
alert(p.name);
//输出结果是:周霆琛

4、apply与call调用

上下文调用,this可以根据参数自定义
想用什么模式就用什么模式
传的是Null——函数调用模式

var fool=function(a,b){
	return a>b?a:b;
};
var num=fool.applu(null,[112,34]);
alert(num);

传的是对象{}——方法调用模式

var fool=function(a,b){
	return a>b?a:b;
};
var num=fool.applu({},[112,34]);
alert(num);

猜你喜欢

转载自blog.csdn.net/cxh6863/article/details/83345362