this在javascript里面一直是让人比较纠结的一块,特别是混在在复杂对象、继承、函数里面,还有一些call、apply这些变态的函数,更是让人头疼不已。javascript
本文只是我我的对this的一些总结,分享给你们,只求你一看能有收获。具体内容可能有误差,也可能比较肤浅,敬请你们留言交流指正。java
首先,我认为,理解js里面的this,首先是理解this这个东西。相信很不少人和我同样,只知道this这样用,那样用,却忽略了一个最基本的事实:this其实指的就是一个对象。一个对象的代名词,不是指一个字符串,也不是一个函数等等。仅仅是一个对象。数组
基本含义:this 对象 返回“当前”对象。在不一样的地方,this 表明不一样的对象。也就是所谓的this所表明的对象要看实际运行时候的上下文环境。app
我今天也正好就单单从“this只是指向对象”这个思路来展开,下面经过几个简单例子来看一下几种状况,而后进行简单的分析:函数
var person={ name:"123", returnThis:function(){ return this; } } var man={ name:"456", getNowThis:this, sayThis1:person.returnThis(), sayThis2:person.returnThis } console.log(man.sayThis1); //person 这里在赋予sayThis1的值时候,returnThis方法已经运行, // this值已经肯定, 指向returnThis所在的环境里面的this console.log(man.sayThis2()); //man 这里在赋予sayThis2的值时候 ,只是把returnThis所表明的 // 函数赋予给sayThis2,因此最后在运行man.sayThis2()函数的时候, // 实际上运行的是return this,故this指向man //这里,主要把person对象returnThish和returnThish()分别赋予给man对象
var arr=[ function(){ return this; } , 2, 3, 4 ] console.log(arr[1]) //2 console.log(arr[0]()) // arr 获得的是这个数组,说明this指向的是这个数组本事 arr[0]()==arr // true 证明了this等于这个数组 arr[0]()[1] //2 this能够正常当作数组也使用
function Person(){
this.age=25;
this.title="title";
this.sayThis=function(){
return this;
}
}
var person1=new Person();
Person.age // undefined
person1.age // 25
person1.sayThis() .title // "title"
person1.sayThis()==Person // fasle
person1.sayThis()==person1 // true