js的this对象相关

 1 var scope = 'globe'
 2 function log() {
 3     // console.log(this)
 4     let arg  = Array.prototype.join.call(arguments, ', ');
 5     console.log(`${this.scope}: ${arg}`);
 6 }
 7 let obj = {
 8     scope: 'own',
 9     lop: function() {
10         let scope = 'scope';
11         log('low')
12     }
13 }
14 obj.lop(); // globe: low
15 obj.lop.call(obj); // globe: low
16 log.call(obj, 'create') // own: create

如果把var scope= ‘globe’ 为 let scope = ‘globe’,结果就是

obj.lop(); // undefined: low
obj.lop.call(obj); // undefined: low
log.call(obj, 'create') // own: create
 
这里分析一下:
  1. log不是作为对象的方法调用的,所以this指向全局对象wondow(这里不考虑nodejs),所以obj.lop()与obj.lop.call(obj)的结果是一样的
  2. 使用var声明scope时,它会被挂在window上,所以使用this可以取到,但是,使用let时,文件相当于一个模块,有局部作用域,scope就不挂在window上了。
  3. log.call(obj, 'create')使用call绑定this值,所以this指向obj

PS: 绑定this方法: call 参数是分开的,apply 参数是数组,bind 绑定this后修改this就没有作用了。

转载于:https://www.cnblogs.com/wangtingnoblog/p/10408931.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值