《你不知道的javascript》读书笔记之this

138 阅读2分钟

最近在读《你不知道的javascript》,虽然工作实践中有遇到文中说过的误区和某些原理导致的“怪异行为”,但是当时都是选择使用某些手段绕过去,没有深究其奥秘。

以下是读《你不知道的javascript》上卷第二章关于this部分做的思维导图

然后我再补充下几点需要⚠️注意的地方

  1. 虽然我们自己使用时不会混合使用严格模式和非严格模式,但是当我们使用第三方库时可能会因为使用严格模式与否导致绑定this的差异,严格模式下默认绑定会指向undefined,非严格模式下会指向全局对象
  2. 当函数作为对象的属性时也是一个独立的个体,严格来说不属于该对象,赋值的时候实际是把函数本身赋值于目标对象(这是个很容易忽略的点,虽然发现bug也能很快反应过来),说得很抽象我们直接看书中的代码示范

  示例1

示例2 (注意p.foo是赋值之后直接调用了,foo并没有作为p的属性使用)

3.javascrip中是没有“构造函数”的,只有对函数的“构造函数调用”,它们不是特殊的函数类型只是被new调用的普通函数而已

4.当不需要显式绑定对象,比起用null,undefined更安全的是使用更“干净”的Object.create(null),说它更干净更空是因为不会创建Object.prototype这个委托

5.使用硬绑定之后无法隐式绑定或者显示绑定来修改this(因为bind使用的是闭包),会降低函数的灵活性,有更改this的需求可以使用“软闭包”