20200221

@czhang
  • date: 20200221
  • author: czhang

Plan

你不知道的 JavaScript 第二部分 第二章

Notes

this 绑定规则

  1. 默认绑定

  2. 隐式绑定

    1. 函数调用中的 this 绑定到这个上下文对象上
    2. 对象引链上的最后一层在调用中才会起作用
    3. 函数别名、参数传递、都会导致 this 的环境变化, 形成回调函数丢失 this 的情况
    4. 参数传递不管是 当前 对象是 什么,都类可以当作是函数别名的方式
  3. 显式绑定

    1. call apply 区别在于参数 其他参数上
    2. 绝大数函数都可以使用 fn.call fn.apply 来调用函数
    3. 硬绑定:创建一个包裹函数,在包裹函数里面使用该函数的 fn.apply 或者 fn.call, 调用时调用包裹函数 ====> 可以解决丢失绑定的问题,且 无论之后强制绑定其他,也不会修改其 fn 的绑定。
    4. bind 即为 重复使用的辅助函数,会返回该“包裹函数”,调用 bind 返回的函数即可。
    function bind(fn, obj) {
        return function() {
            return fn.apply(obj, arguments);
        };
    }
    
    1. "上下文" context 作用 和 bind 一样,都是确保回调函数使用指定的 this
  4. new 绑定

    1. new 来调用函数,即为 构造函数的调用,执行以下操作:
      1. 创建一个全新的对象
      2. 新对象被执行 [[Prototype]] 连接
      3. 新对象会绑定到函数调用的 this
      4. 如果函数没有返回其他对象,会自动返回该对象

this 绑定四条规则优先级问题

  1. 默认绑定优先级最低
  2. 显式绑定 > 隐式绑定

More

考虑 如果构造 new 绑定 和 隐式绑定 对比 , 如何构造 new 绑定和 显示绑定对比