20200221
- date: 20200221
- author: czhang
Plan
你不知道的 JavaScript 第二部分 第二章
Notes
this 绑定规则
默认绑定
隐式绑定
- 函数调用中的 this 绑定到这个上下文对象上
- 对象引链上的最后一层在调用中才会起作用
- 函数别名、参数传递、都会导致 this 的环境变化, 形成回调函数丢失 this 的情况
- 参数传递不管是 当前 对象是 什么,都类可以当作是函数别名的方式
显式绑定
- call apply 区别在于参数 其他参数上
- 绝大数函数都可以使用 fn.call fn.apply 来调用函数
- 硬绑定:创建一个包裹函数,在包裹函数里面使用该函数的 fn.apply 或者 fn.call, 调用时调用包裹函数 ====> 可以解决丢失绑定的问题,且 无论之后强制绑定其他,也不会修改其 fn 的绑定。
- bind 即为 重复使用的辅助函数,会返回该“包裹函数”,调用 bind 返回的函数即可。
function bind(fn, obj) { return function() { return fn.apply(obj, arguments); }; }- "上下文" context 作用 和 bind 一样,都是确保回调函数使用指定的 this
new 绑定
- new 来调用函数,即为 构造函数的调用,执行以下操作:
- 创建一个全新的对象
- 新对象被执行 [[Prototype]] 连接
- 新对象会绑定到函数调用的 this
- 如果函数没有返回其他对象,会自动返回该对象
- new 来调用函数,即为 构造函数的调用,执行以下操作:
this 绑定四条规则优先级问题
- 默认绑定优先级最低
- 显式绑定 > 隐式绑定
More
考虑 如果构造 new 绑定 和 隐式绑定 对比 , 如何构造 new 绑定和 显示绑定对比