有以下几种状况
- this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象
function a(){
var user = "伏地魔";
console.log(this.user); //undefined
console.log(this); //Window
}
a();
var o = {
user:"伏地魔",
fn:function(){
console.log(this.user); //伏地魔
}
}
o.fn();
- 这个函数中包含多个对象,尽管这个函数是被最外层的对象所调用,this指向的也只是它上一级的对象
var o = {
a:10,
b:{
a:12,
fn:function(){
console.log(this.a); //12
}
}
}
o.b.fn();
var o = {
a:10,
b:{
// a:12,
fn:function(){
console.log(this.a); //undefined
}
}
}
o.b.fn();
- 如果返回值是一个对象,那么this指向的就是那个返回的对象,如果返回值不是一个对象那么this还是指向函数的实例
function fn()
{
this.user = '伏地魔';
return {}; //return function(){}
}
var a = new fn;
console.log(a.user); //undefined
function fn()
{
this.user = '伏地魔';
return 1;
}
var a = new fn;
console.log(a.user); //伏地魔
- 构造函数版this
function Fn(){
this.user = "伏地魔";
}
var a = new Fn();
console.log(a.user); //伏地魔
- 在严格版中的默认的this不再是window,而是undefined