【JS-task4】 简述JS中this的指向

分享人:何阳

目录

1.背景介绍

2.知识剖析

3.常见问题

4.解决方案

5.编码实战

6.扩展思考

7.参考文献

8.更多讨论

1.背景介绍

this 关键字是 JavaScript 中最复杂的机制之一。它是一个很特别的关键字,被自动定义在所有函数的作用域中。

this 提供了一种更优雅的方式来隐式“传递”一个对象引用,因此可以将 API 设计得更加简洁并且易于复用。

2.知识剖析

this 认知误区

1 指向函数

2 指向函数作用域

this 的绑定和函数声明的位置没有任何关系,只取决于函数的调用方式。this 是函数调用时产生一个属性,会在函数执行的过程中用到。

this 绑定机制

每个函数的 this 是在调用时被绑定的,完全取决于函数的调用位置

1 默认绑定 2 隐式绑定 3 显示绑定 4 new绑定


                    

                        function.call(thisArg, arg1, arg2, ...)

                        function.apply(thisArg, [argsArray])

                    

                

this 绑定方式优先级

1. 函数是否在 new 中调用(new 绑定)?如果是的话 this 绑定的是新创建的对象。

2. 函数是否通过 call、apply(显式绑定)或者硬绑定调用?如果是的话,this 绑定的是指定的对象。

3. 函数是否在某个上下文对象中调用(隐式绑定)?如果是的话,this 绑定的是那个上下文对象。

4. 如果都不是的话,使用默认绑定。如果在严格模式下,就绑定到 undefined,否则绑定到全局对象。

绑定机制 方法 严格模式 优先级
默认绑定 全局调用 TypeError:undefined 4
隐式绑定 间接调用 3
显示绑定 使用call、apply方法 2
new 绑定 new 调用函数 1

3.常见问题

去除 this 绑定机制

4.解决方案

使用作用域代替


                    

                        var self = this;

                        var that = this;

                    

                

5.编码实战

demo

6.扩展思考

7.参考文献

参考一  你不知道的JavaScript上卷

8.更多讨论

鸣谢

感谢大家观看

BY : 陈占乐|何阳

Contact GitHub API Training Shop Blog About © 2016 GitHub, Inc. Terms Privacy Security Status He