深入理解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的指向;