關於javascript this問題

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

 

文筆粗糙,若有錯誤,忘大神指正。 

相關文章
相關標籤/搜索