如何正确判断this的指向?

本题地址: https://github.com/YvetteLau/Step-By-Step/issues/1

全局环境

无论是否在严格模式下,在全局执行环境中(在任何函数体外部)this 都指向全局对象。

函数(运行内)环境

  1. 简单调用(此调用未设置this)
    非严格模式下,this 的值默认指向全局对象。
    在严格模式下,this将保持他进入执行环境时的值。如果 this 没有被执行环境(execution context)定义,那它将保持为 undefined。
    当一个函数在其主体中使用 this 关键字时,可以通过使用函数继承自Function.prototype 的 call 或 apply 方法将 this 值绑定到调用中的特定对象。(如果传递给 this 的值不是一个对象,JavaScript 会尝试使用内部 ToObject 操作将其转换为对象。)
  2. bind方法
    ES5 引入了 Function.prototype.bind。调用f.bind(someObject)会创建一个与f具有相同函数体和作用域的函数,在这个新函数中,this将永久地被绑定到了bind的第一个参数,无论此函数是如何被调用的。
  3. 箭头函数
    在箭头函数中,this与封闭词法环境的this保持一致。在全局代码中,它将被设置为全局对象。
  4. 作为对象的方法
    当函数作为对象里的方法被调用时,它们的 this 是调用该函数的对象。(此概念适用于原型链中的this和getter 与 setter 中的 this)
  5. 作为构造函数
    当一个函数用作构造函数时(使用new关键字),它的this被绑定到正在构造的新对象。(手动返回其他对象时,则绑定到返回的这个对象上)
  6. 作为一个DOM事件处理函数
    当函数被用作事件处理函数时,它的this指向触发事件的元素(一些浏览器在使用非addEventListener的函数动态添加监听函数时不遵守这个约定)。
  7. 作为一个内联事件处理函数
    当代码被内联on-event 处理函数调用时,它的this指向监听器所在的DOM元素。

this - JavaScript | MDN

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1.概念 在JavaScript中,this 是指当前函数中正在执行的上下文环境,因为这门语言拥有四种不同的函数调...
    BluesCurry阅读 4,890评论 0 2
  • 特别说明,为便于查阅,文章转自https://github.com/getify/You-Dont-Know-JS...
    杀破狼real阅读 4,057评论 0 1
  • 函数和对象 1、函数 1.1 函数概述 函数对于任何一门语言来说都是核心的概念。通过函数可以封装任意多条语句,而且...
    道无虚阅读 10,206评论 0 5
  • 涵义 this关键字是一个非常重要的语法点。毫不夸张地说,不理解它的含义,大部分开发任务都无法完成。 首先,thi...
    许先生__阅读 3,674评论 0 4
  • 第3章 基本概念 3.1 语法 3.2 关键字和保留字 3.3 变量 3.4 数据类型 5种简单数据类型:Unde...
    RickCole阅读 10,722评论 0 21

友情链接更多精彩内容