JavaScript中的this

本文深入探讨了JavaScript中this关键字的指向问题,通过多个实例详细解释了this如何根据调用上下文变化而变化,并讨论了在不同情况下this的具体指向。

例1:

function a(){
    var user = "yao";
    console.log(this.user);//undefined
    console.log(this);//window
}
a();
等价于:

function a(){
    var user = "yao";
    console.log(this.user);//undefined
    console.log(this);//window
}
window.a();
this指向的是window。

例2:

var o =  {
    user:"yao",
    fn:function () {
        console.log(this.user);//yao
    }
}
o.fn();
this指向的是o。

例3:

var o = {
    user:"yao",
    fn:function () {
        console.log(this.user);//yao
    }
}
window.o.fn();
this指向的是o。

var o = {
    a:10,
    b:{
        a:12,
        fn:function () {
            console.log(this.a);//12
        }
    }
}
o.b.fn();
this指向的是b。

例4:

var o = {
    a:10,
    b:{
        a:12,
        fn:function () {
            console.log(this.a);//undefined
            console.log(this);//window
        }
    }
};
var j = o.b.fn;
j();
综上所述:

this的指向永远是最终调用它的对象。


当this遇上函数的return:

例5:

function fn(){
    this.user = "yao";
    return {};
}
var a = new fn;
console.log(a.user);//undefined
例6:
function fn(){
    this.user = "yao";
    return function(){};
}
var a = new fn;
console.log(a.user);//undefined
例7:

function fn(){
    this.user = "yao";
    return 1;
}
var a = new fn;
console.log(a.user);//yao
例8:
function fn(){
    this.user = "yao";
    return undefined;
}
var a = new fn;
console.log(a.user);//yao

this指向的是函数返回的那个对象。

function fn(){
    this.user = "yao";
    return null;
}
var a = new fn;
console.log(a.user);//yao
虽然:null是对象,但是此时this指向的仍然是函数的实例。


PS:

在"use strict"模式下,this默认的指向是undefined,而不是window。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值