javascript的this指向問題

weixin_33807284發表於2018-04-14

例子1:

var obj = {
    name : 'aaa',
    getName : function () {
        console.log(this.name);
    }
}
console.log(window.name);
var fn1 = obj.getName;
obj.getName();//aaa
var fn2 = obj.getName();//aaa
fn1();//空 (注意: window 有一個自帶的 name屬性. fn1(), 的this指向window)
fn2();//報錯 

這題考到了 this 的指向, 還有一個小坑, 在 window 下, 預設有一個 name 屬性, 這題在 window 沒有給 name 定義變數, 這題 fn1() 的時候 this 指向的 window 是一個空, 要注意

例子2:

var name = '222';
var a = {
    name : '111',
    say : function () {
        console.log(this.name);
    }
}
var fun = a.say;
fun();//222 (fun(),this指向window)
a.say();//111 (a.say(),this指向a)
var b = {
    name : '333',
    say : function (fun) {
        fun();
    }
}
b.say(a.say);//222 (傳參fun, fun = a.say, 內部執行fun(), 和上面的結果是一樣的)
b.say = a.say;// (b.say = a.say, b內部say : function () {console.log(this.name);})
b.say();//333 (b.say(),this指向b)

例子3:

var a = 5;
function Test() {
    a = 0;
    console.log(a);
    console.log(this.a);
    var a;
    console.log(a);
}
Test(); 
// 0
// 5 (Test(),this指向window)
// 0
var test = new Test(); (new的時候會建立一個this = {})
// 0
// undefined (Test建構函式中沒有this.a, 所以為undefined)
// 0

總結: 誰呼叫的這個方法,this 就指向誰

相關文章