搞懂 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可以在运行时修改作用域,但不推荐使用,可能导致性能问题和难以预料的错误。

➡️

继续阅读