深入理解this——随笔记

我们都知道:this总是返回一个对象,简单说,就是返回属性或方法“当前”所在的对象。

var Person={

  name:"张小驴",

  sayName:function(){

       console.log(this.name);//"张小驴"、、//这里的this就是指就是name这个属性所在的对象:Person

       }

}

 

var Person=function(){
this.name="baba";//this代表实例对象
   return this;//this代表函数运行的当前环境
}

var p=new Person();
console.log(p);//{name:"baba"}

var p1=Person();
console.log(p1);//window对象
//函数在全局环境运行,它内部的this就指向顶层对象window。
//不管是不是在函数内部,只要是在全局环境下运行,this就是指顶层对象window。
console.log(this);//window对象

 


var male={
sex:"male",
girl:{
name:"lili",
sayGirlSex:function(){
console.log(this.name);
console.log(this.sex);
}
},
saySex:function(){
console.log(this);//this 是male
}
}
male.saySex();//this 是male

(male.saySex=male.saySex)();//this 是window,先运算后执行
//这时this就脱离了运行环境obj,而是在全局环境执行。

male.girl.sayGirlSex();//lili undefined
//如果某个方法位于多层对象的内部,这时this只是指向当前一层的对象,而不会继承更上面的层。


//总结:如果在构造函数中出现this,指向的是实例对象,如果在函数中出现单独this指向当前函数运行的环境;如果在对象中(非方法中)出现this,this指向当前一层对象;如果在对象中的方法中出现单独this,还是指向当前运行环境;

//为了固定this的指向,我们常常使用call apply bind 来绑定this的指向;

 

posted on 2017-10-13 15:02  龟和兔子赛跑  阅读(110)  评论(0)    收藏  举报

导航