this的指向问题
this只指向上一级的对象(上一级的对象主要看执行语句决定),如果没有上级对象,就是window对象
new可以改变this的指向,因为new创建了一个实例对象,this就指向那个对象
当this碰到return时,return返回值是一个对象的话,this就指向那个返回的对象,
如果返回值不是一个对象那个的话,this还是指向函数的实例(null特殊:虽然是一个对象,但是this也指向函数实例)
例子一:没有上级对象,就是window对象
var name="kakaka";
var object=function(){
var name="lalala";
alert(this.name);
}
object();//没有上一级,所以是window
例子二:指向上一级的对象(1)
var name="kakaka";
var object={
name:"lalala",
typename:function(){
alert(this.name);
}
}
object.typename();//上一级是object,所以返回的是lalala
例子三:指向上一级的对象(2)
var name="kakaka";
var object={
name:"lalala",
type:{
name:"ninini",
typename:function(){
alert(this.name);
}
}
}
object.type.typename();//上一级是type,所以返回的是ninini
例子四:指向上一级的对象(3)
var name="kakaka";
var object={
name:"lalala",
type:{
name:"ninini",
typename:function(){
alert(this.name);
}
}
}
var j=object.type.typename;//赋值给新对象
j();//没有上一级,所以是window
例子五:构造函数中,this就指向new创建的实例对象
var obj=function(){
this.name="lalala";
}
var j=new obj();
alert(j.name);
例子六:当this碰到return时,return返回值是一个对象的话,this就指向那个返回的对象
var obj=function(){
this.name="lalala";
return {};//返回值是一个对象
}
var j=new obj();
alert(j.name);//this指的是返回的那个对象,所以为undefined
例子七:如果返回值不是一个对象那个的话,this还是指向函数的实例(null特殊:虽然是一个对象,但是this也指向函数实例)
var obj=function(){
this.name="lalala";
return undefined;//返回的值不是一个对象那个的话
}
var j=new obj();
alert(j.name);//this指向的还是原来的函数的实例,显示lalala
浙公网安备 33010602011771号