分享人:江吉仪
目录
1.背景介绍
2.知识剖析
3.常见问题
4.解决方案
5.编码实战
6.扩展思考
7.参考文献
8.更多讨论
this 关键字是 JavaScript 中最复杂的机制之一。它是一个很特别的关键字,被自动定义在所有函数的作用域中。
this 提供了一种更优雅的方式来隐式“传递”一个对象引用,因此可以将 API 设计得更加简洁并且易于复用。
1 指向函数
2 指向函数作用域
this 的绑定和函数声明的位置没有任何关系,只取决于函数的调用方式。this 是函数调用时产生一个属性,会在函数执行的过程中用到。
每个函数的 this 是在调用时被绑定的,完全取决于函数的调用位置
1 默认绑定 2 隐式绑定 3 显示绑定 4 new绑定
function.call(thisArg, arg1, arg2, ...)
function.apply(thisArg, [argsArray])
1. 函数是否在 new 中调用(new 绑定)?如果是的话 this 绑定的是新创建的对象。
2. 函数是否通过 call、apply(显式绑定)或者硬绑定调用?如果是的话,this 绑定的是指定的对象。
3. 函数是否在某个上下文对象中调用(隐式绑定)?如果是的话,this 绑定的是那个上下文对象。
4. 如果都不是的话,使用默认绑定。如果在严格模式下,就绑定到 undefined,否则绑定到全局对象。
绑定机制 | 方法 | 严格模式 | 优先级 |
---|---|---|---|
默认绑定 | 全局调用 | TypeError:undefined | 4 |
隐式绑定 | 间接调用 | 3 | |
显示绑定 | 使用call、apply方法 | 2 | |
new 绑定 | new 调用函数 | 1 |
去除 this 绑定机制
使用作用域代替
var self = this;
var that = this;
感谢大家观看
BY : 陈占乐|江吉仪