[JavaScript] this的指向 (1) [非严格模式]

this的指向在函数定义的时候是不能确定的,只有在函数执行的时候才能确定它的指向。

实际上this的指向的是调用它的那个对象。

例一:

function user() {
    var name = "憨憨";
    console.log(this.name); // ""
    console.log(this);  // window

}
user(); // 等价于 window.user();

this最终指向的是调用它的对象,user这个方法是被window调用的,所以this指向了window。

例二:

var oo = {
    name: "憨憨",
    sayHello: function () {
        console.log("Hello, " + this.name); // Hello, 憨憨
    }
}

oo.sayHello();

oo这个对象调用了sayHello这个方法,所以this指向的是oo这个对象。

例三:

var oo = {
    name: "憨憨",
    bb: {
        name: "铁憨憨",
        sayHello: function () {
            console.log("Hello, " + this.name); // Hello, 铁憨憨
        }
    }
    
}

oo.bb.sayHello();

同理可知,bb这个对象调用了sayHello这个方法,所以this对象指向的是bb。

例四:

var oo = {
    name: "憨憨",
    sayHello: function () {
        console.log(this.name); // ""
        console.log(this); // window
    }

}

var bb = oo.sayHello;
bb();

这里变得有些不一样了,为什么this不再是oo了?因为这里是赋值的操作,并没有执行。

最终执行还是window调用的sayHello方法,所以这里的this指的是window。

总结:

简单来说,就是this指向直接调用他的那个对象。

this总是返回一个对象,简单说,就是返回属性或方法“当前”所在的对象。

 

参考文章:

彻底理解js中this的指向,不必硬背

https://www.cnblogs.com/pssp/p/5216085.html

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值