美文网首页前端开发
如何正确判断this的指向?

如何正确判断this的指向?

作者: 李轻舟 | 来源:发表于2019-05-20 17:40 被阅读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

    相关文章

      网友评论

        本文标题:如何正确判断this的指向?

        本文链接:https://www.haomeiwen.com/subject/lshlzqtx.html