搞懂 Javascript 中的this(包含apply、call、bind)
💡
原文中文,约3600字,阅读约需9分钟。
📝
内容提要
JavaScript中的关键字this是一个复杂机制,指向执行时的当前对象。其绑定方式取决于函数的调用方式,包括作为对象方法、普通函数、构造器调用以及使用call或apply。eval和with可以在运行时修改作用域,但不推荐使用。
🎯
关键要点
- this 关键字是 JavaScript 中最复杂的机制之一,指向执行时的当前对象。
- this 的绑定取决于函数的调用方式,包括作为对象方法、普通函数、构造器调用以及使用 call 或 apply。
- 作为对象的方法调用时,this 指向该对象。
- 作为普通函数调用时,this 指向全局对象。
- 构造器调用时,this 指向返回的对象,除非显式返回一个对象。
- call 和 apply 可以动态改变函数的 this 指向,apply 接受数组作为参数,call 接受不固定数量的参数。
- bind 方法修改 this 后返回一个新的函数,但不会立即执行。
- eval 和 with 可以在运行时修改作用域,但不推荐使用,可能导致性能问题和难以预料的错误。
❓
延伸问答
JavaScript中的this指向什么?
this指向执行时的当前对象。
如何使用call和apply改变this的指向?
call和apply可以动态改变函数的this指向,apply接受数组作为参数,call接受不固定数量的参数。
构造器调用时this指向哪里?
构造器调用时,this指向返回的对象,除非显式返回一个对象。
普通函数调用时this指向哪个对象?
普通函数调用时,this指向全局对象。
bind方法的作用是什么?
bind方法修改this后返回一个新的函数,但不会立即执行。
eval和with在JavaScript中有什么风险?
eval和with可以在运行时修改作用域,但不推荐使用,可能导致性能问题和难以预料的错误。
➡️