this指向詳細解析

指向總結

  • 全局中指向windowjavascript

  • 函數預編譯過程時指向windowjava

  • call apply改變this指向(在上一篇博客中詳細說起了他們兩個的做用今天就不包含在實際案例之中)app

  • 對象調用方法this的指向函數


實例分析

var name= "222";
    var a = {
        name : "111",
        say : function() {
            console.log(this.name);
        }
    }
    var fun = a.say;
    fun();  
    a.say();  
    var b = {
        name : "333",
        say : function(fun){
            fun();     
        }
    }
    b.say(a.say);
    b.say = a.say;
    b.say(); 
複製代碼

按照以前所總結的答案很顯然22二、1十一、22二、333。ui

很差理解的點可能在於b.say(a.say),這句語句至關於實現了把a中的方法放到b的say方法中調用,注意調用二字,b中say方法執行時只是在全局中執行了fun函數,而不是說b對象運行了fun函數中的代碼。因此結果是222。this

構造函數與函數區別

構造函數與函數this指向區別咱們來看個案例spa

var a = 5;
function test() {
    console.log(a);
    a = 0;
    console.log(this.a);
    var a;
    console.log(a);
}
console.log(test()); // undefined、五、0

console.log(new test()) // undefined、undefined、0
複製代碼

這邊又再次複習了一下與預編譯的實現實現1時,函數中預編譯環節this指向window因此輸出5 執行2時,以前說起過構造函數生成對象時函數中會生成一個空的this對象(構造函數那篇有詳細說明),那麼這一次函數中this指向的是函數中的那個空this因此返回undefined。code

ending...對象

相關文章
相關標籤/搜索