例子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
就指向谁
网友评论