this

this

this的5种绑定方式:
(1)默认绑定(非严格模式下this指向全局对象, 严格模式下this会绑定到undefined)
(2)隐式绑定(当函数引用有上下文对象时, 如 obj.foo()的调用方式, foo内的this指向obj)
(3)显示绑定(通过call()或者apply()方法直接指定this的绑定对象, 如foo.call(obj))
(4)new绑定
(5)箭头函数绑定(this的指向由外层作用域决定的)

1. 默认绑定
在非严格模式下this指向的是全局对象window,而在严格模式下会绑定到undefined。

2. 隐式绑定
this 永远指向最后调用它的那个对象。

3. 隐式绑定的隐式丢失问题
隐式丢失其实就是被隐式绑定的函数在特定的情况下会丢失绑定对象。
有两种情况容易发生隐式丢失问题:
(1)使用另一个变量来给函数取别名
(2)将函数作为参数传递时会被隐式赋值,回调函数丢失this绑定
如果把一个函数当成参数传递到另一个函数的时候,会发生隐式丢失的问题,且与包裹着它的函数的this指向无关。在非严格模式下,会把该函数的this绑定到window上,严格模式下绑定到undefined。

4. 显式绑定
就是强行使用某些方法,改变函数内this的指向。
通过call()、apply()或者bind()方法直接指定this的绑定对象, 如foo.call(obj)。
注:
(1)使用.call()或者.apply()的函数是会直接执行的
(2)bind()是创建一个新的函数,需要手动调用才会执行
(3).call()和.apply()用法基本类似,不过call接收若干个参数,而apply接收的是一个数组
(4)如果call、apply、bind接收到的第一个参数是空或者null、undefined的话,则会忽略这个参数。

5. 显式绑定的其它用法
可以在一个函数内使用call来显式绑定某个对象,这样无论怎样调用它,其内部的this总是指向这个对象。
forEach、map、filter函数的第二个参数也是能显式绑定this的

6. new 绑定
使用new来调用一个函数,会构造一个新对象并把这个新对象绑定到调用函数中的this。

7. 箭头函数绑定
(1ÿ

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值