javascript---this的指向问题

114 阅读1分钟

前言

首先要说的是,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象;

示例

代码一 以下代码的调用实际上是window.a()的调用,所以this指向window

function a(){
    var user = "LiLei";
    console.log(this.user); //undefined
    console.log(this); //Window
}
a();

代码二 以下代码的调用是o点出来的,所以this指向o,o.user是LiLei,所以输出是LiLei; window.o.fn()的输出结果跟o.fn()的结果是一致的,由此可以知道this的指向是指向调用它的上一级对象.

var o = {
    user:"LiLei",
    fn:function(){
        console.log(this.user);  //LiLei
    }
}
o.fn();
window.o.fn();

代码三----当this遇到return会发生什么呢?

function fn()  
{  
    this.user = 'LiLei';  
    return {};  
}
var a = new fn;  
console.log(a.user); //undefined
function fn()  
{  
    this.user = 'LiLei';  
    return function(){};
}
var a = new fn;  
console.log(a.user); //undefined
function fn()  
{  
    this.user = 'LiLei';  
    return undefined;
}
var a = new fn;  
console.log(a.user); //LiLei
// null虽然是对象 但是是比较特殊的一个
function fn()  
{  
    this.user = 'LiLei';  
    return null;
}
var a = new fn;  
console.log(a.user); //LiLei

总结: 函数如果返回的是对象类型,那么this是指向返回的对象;如果不是对象,this指向函数的实例; 这里涉及到new的原理实现,可参考javascript---原型链;里面有一个new操作符的实现.