JS中this的五种情况总结

作者: 羽晞yose | 来源:发表于2021-05-05 23:23 被阅读0次

什么是this

this不是执行上下文(EC才是执行上下文),this是执行主体

  • this,在全局上下文下,this指向window
  • 块级上下文中没有自己的this,它的this是继承所在上下文中的this
  • 函数的私有上下文中,this的情况会多种多样

私有上下文中的this

  1. 事件绑定中,给元素的某个事件行为绑定方法,当事件行为触发,方法执行,方法中的this是当前元素本身(特殊:IE6~8中基于attachEvent()方法实现的DOM2事件绑定,事件触发,方法中的thiswindow而不是元素本身)
let body = document.body
body.onclick = function () {
    console.log(this) // body
}
body.addEventListener('click', function () {
    console.log(this) // body
})
body.attachEvent('onclick', function () {
    console.log(this) // window
})
  1. 普通方法执行(包括自执行函数执行、普通函数执行、对象成员访问要调取方法执行等),只需要看函数执行的时候,方法名前面是否有“点”,有“点”,“点”前面是谁,this就是谁,没有“点”,this就是window[非严格模式]/undefined[严格模式]
let obj = {
    fn: (function () {
        console.log(this) // window
        return function () {}
    })()
}

function func () {
    console.log(this)
}
let obj = {
    func
}
func() // window
obj.func() // obj

[].slice() // 数组实例基于原型链机制,找到Array原型上的slice方法,然后再把slice方法执行,此时slice方法中的this是当前的空数组
[].prototype.slice() // 此时this是Array.prototype

  1. 构造函数执行(new),构造函数体中的this是当前类的实例。而原型上方法中的this不一定都是实例,主要看执行的时候,“点”前面的内容(同第二点)
function Func () {
    this.name = 'F'
    console.log(this)
}
Func.prototype.getNum = function getNum () {
    console.log(this)
}
let f = new Func() // Func {name: "F"}
f.getNum() // Func {name: "F"}
Func.prototype.getNum() // {getNum: ƒ, constructor: ƒ}
  1. ES6中提供了Arrow Function(箭头函数):箭头函数没有自己的this,它的this是继承所在上下文中的this
let obj = {
    func: function () {
        console.log(this) // obj
    },
    sum: () => {
        console.log(this) // window,块级上下文中没有自己的this
    }
}
  1. 可以基于call/apply/bind方式,强制手动改变函数中this的指向

相关文章

  • JS中this的五种情况总结

    什么是this this不是执行上下文(EC才是执行上下文),this是执行主体 this,在全局上下文下,thi...

  • JS中的逻辑运算符&&、||

    1、JS中的||符号: 运算方法: 总结:真前假后 2、JS中的&&符号: 运算方法: 总结:假前真后

  • JavaScriptCore与WebView

    Html中JS 与 Native交互情况 Native调用JS JS调用Native 一. 获取WebView的...

  • JSPatch下发笔记10

    OC代码: JS代码: 总结:NSForegroundColorAttributeName 在js中要写成"NSC...

  • Android中webview与js的交互(一)

    webview中调用js html中调用java android中配置 html中使用 总结 webview与js...

  • js中this总结

    此篇为《你不知道的JavaScript》读书笔记 函数的执行过程中调用位置决定this的绑定对象 绑定规则 默认绑...

  • js中如何访问对象和数组

    目录 一、总结 一句话总结:js访问对象点和中括号,访问数组的话就是中括号 1、js访问对象的两种方式? 2、js...

  • [Android 与 js 简单互调

    Android 与 js 简单互调 总结: Android 调用 js: 在 Android 中创建通往 jav...

  • js中对象做键的情况

    题目如下: 前置知识:js对象属性通过点(.)和方括号([])的不同之处: 点操作符: 静态的。右侧必须是一个以属...

  • js中的继承总结

    背景 好久都没有写原生的js了。突然发现自己对一些基础概念有些生疏了,故以红宝书为基础,总结下相关的基础知识。 原...

网友评论

    本文标题:JS中this的五种情况总结

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