this在javascript里面一直是让人比较纠结的一块,特别是混在在复杂对象、继承、函数里面,还有一些call、apply这些变态的函数,更是让人头疼不已。
本文只是我个人对this的一些总结,分享给大家,只求你一看能有收获。具体内容可能有偏差,也可能比较肤浅,敬请大家留言交流指正。
首先,我认为,理解js里面的this,首先是理解this这个东西。相信很很多人和我一样,只知道this这样用,那样用,却忽略了一个最基本的事实:this其实指的就是一个对象。一个对象的代名词,不是指一个字符串,也不是一个函数等等。仅仅是一个对象。
基本含义:this 对象 返回“当前”对象。在不同的地方,this 代表不同的对象。也就是所谓的this所代表的对象要看实际运行时候的上下文环境。
我今天也正好就单单从“this只是指向对象”这个思路来展开,下面通过几个简单例子来看一下几种情况,然后进行简单的分析:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 |
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对象 |
1 |
|
1
2
3
4
5
6
7
8
9
10
11 |
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可以正常当做数组也使用 |
1
2
3
4
5
6
7
8
9
10
11
12
13 |
function
Person(){ this .age=25; this .title= "title" ; this .sayThis= function (){ return
this ; } } var
person1=<span style= "color: rgb(255, 0, 0);" > new </span> Person(); Person.age // undefined person1.age // 25 person1.sayThis() .title // "title" person1.sayThis()==Person // fasle person1.sayThis()==person1 // true |
javascript中this的用法----个人见解,布布扣,bubuko.com
原文:http://www.cnblogs.com/lwl8/p/3624176.html