this绑定问题

this绑定知识

    var name = 'global'
    var obj = {
        name:'local',
        foo:function(){
            this.name = 'foo'
        }.bind(window)
    }
    var bar = new obj.foo()
    setTimeout((function(){
        console.log(window.name)
    }),0)
    console.log(bar.name)
    var bar3 = bar2 = bar
    bar2.name = "foo2"
    console.log(bar3.name) 

解析

foo
foo2
global
主要是这句 var bar = new obj.foo()
这涉及到隐性绑定,硬绑定和new绑定
new绑定会使得this不管之前绑定了什么,this都会绑定给new的对象上
所以bar.name = this.name = ‘foo’
var bar3 = bar2 = bar复制的是bar地址
所以bar2修改name就是修改了this.name
所以bar3.name = ‘foo2’
setTimeout()不管什么时间都会最后出来

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值