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