例子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 有一個(gè)自帶的 name屬性. fn1(), 的this指向window)
fn2();//報(bào)錯(cuò)
這題考到了 this
的指向, 還有一個(gè)小坑, 在 window
下, 默認(rèn)有一個(gè) name
屬性, 這題在 window
沒有給 name
定義變量, 這題 fn1()
的時(shí)候 this
指向的 window
是一個(gè)空, 要注意
例子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, 內(nèi)部執(zhí)行fun(), 和上面的結(jié)果是一樣的)
b.say = a.say;// (b.say = a.say, b內(nèi)部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的時(shí)候會(huì)創(chuàng)建一個(gè)this = {})
// 0
// undefined (Test構(gòu)造函數(shù)中沒有this.a, 所以為undefined)
// 0
總結(jié): 誰調(diào)用的這個(gè)方法,this
就指向誰