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