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

posted @ 2018-03-04 16:03  Dilomen  阅读(66)  评论(0)    收藏  举报