this是Javascript語言的一個關鍵字。
它表明函數運行時,自動生成的一個內部對象,只能在函數內部使用。例如:app
function person() { this.name = 'jack'; this.age = 12; }
函數使用場合的不一樣,this的值也會發生相應變化。可是有一個總的原則,那就是this指的是,調用該函數的那個對象。
下面來講說this的用法。 函數
function person() { this.age = 12; alert(this.age); } person(); // 12
這個是一般的用法,this表明全局對象Global,實則,person的調用是 window.peroson() this-》windowthis
var age = 12; function person() { alert(this.age); } person(); // 12
咱們能夠看一下 ,將age在全局聲明,結果還是12;spa
那咱們再來變一下:code
var age = 12; function person() { this.age = 10; alert(this.age); } person(); alert(age) // 10
=============================================================對象
function person() { alert(this.age); } var obj = new Object(); obj.age = 10; obj.fn = person; obj.fn();
上面咱們建立一個空對象 給對象的age屬性賦值,對象的方法就是person,直接調用 ,此時this的調用對象是obj,obj的age是10;blog
===========================================================ip
function person() { this.age = 10; } var obj = new person(); alert(obj.age)
咱們來用person建立一個構造函數 此時函數生成一個新的對象,不少人可能不太明白這個對象的由來:io
function person() { var obj = new Object(); obj.age = 10; return obj; } // var obj = new person(); alert(person().age)
這樣寫會不會看起來一下豁然開朗呢?原來當咱們new person()的時候,perison內部會自動建立一個空對象賦值給this,而後再返回this。因此天然就能夠用新建立的構造函數去操做了!function
var age = 12; function person() { this.age = 10; } var obj = new person(); alert(age) //12
而此時age的值是12 ,不難看出,這時的age已經並非全局的了。固然若是把構造函數幹掉 變成window.person();age依然是全局,想必你們已經明白了this的用法了
==========================================================
var age = 12; function person() { alert(this.age); } var obj = new Object(); obj.age = 10; obj.fn = person; obj.fn.apply();//12
最後說一下,apply和call吧,改變this指向,像這樣obj.fn.apply(obj) 括號內放this要指向的對象。這樣對象指向obj結果將會是obj的age
文筆粗糙,若有錯誤,忘大神指正。