javascript的this指向问题

例子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 就指向谁

你可能感兴趣的:(javascript的this指向问题)