this

遇到this,就把所有的函数调用改为call=

  • 记住this是参数
  • 如果是对象后面接函数,那么call后面的第一个参数是对象
    如:a.sayName() => a.sayName.call(a) => this为a
  • 如果直接是一个函数,那么就默认为 window.fn,那么第一个参数this就是window
    如:sayName() => wimdow.sayName.call(window) => this为window
  • JS中加不加括号都是一样的
    如:(a.sayName)() 等价于 a.sayName()
    因此:(a.sayName)() 中的this还是a

练习1
在这里插入图片描述

  • 首先转换所有函数调用的代码,添加call
  • 判断函数前面是对象还是window来确定this得的值
    sayName.call() => window
    sss.call() => window => window.name = 外
    a.sayName.call => a => a.name = 里
    (a.sayName).call() => a => a.name = 里
    b.call() => window => window.name = 外

练习2
在这里插入图片描述

  • 其中:arguments[0]表示传入的参数数组的第0个,也就是fn
  • arguments=[fn,1]
  • 转换代码为call
    fn() => fn.call() => window => window.length = 10
    arguments0 => arguments.fn.call => arguments => arguments.length = 2
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值