美文网首页
关于this指向的总结

关于this指向的总结

作者: yapingXu | 来源:发表于2020-11-14 19:48 被阅读0次

分析下面的代码指向,注意都是在非严格模式下面的指向

function foo(){
  console.log(this)
}
foo()
foo.call(1)
  • 如果是在浏览器环境下调用,指向全局对象window,
  • 如果在node环境下调用,指向 globalThis
  • 上面call,bind,apply这种方式,指向的是1
const obj1 = {
  foo: function(){
    console.log(this)
  }
}
obj1.foo() // => obj1
const fn = obj1.foo
fn() // => window
const obj2 = {
  foo: function(){
    function bar() {
      console.log(this)
    }
    bar()
  }
}
obj2.foo() // => window

关于this 的总结

  • 沿着作用域向上找最近的一个function(不是箭头函数),看这个function 最终是怎么执行的
  • this的指向取决于所属function的调用方式,而不是定义方式
  • function 调用一般分为几种情况:
    1. 作为函数调用,即为 foo()
      • 这种情况指向全局对象,注意严格模式问题,严格模式下是undefined
    2. 作为方法调用,即为foo.bar() /foo.bar.baz()/ foo['bar']/ foo[0]()
      • 这种情况指向调用这个方法的对象
    3. 作为构造函数调用,即:new Foo()
      • 这种情况最终指向一个新对象Foo {}
    4. 特殊调用, 即: foo.call()/ foo.apply()/ foo.bind()
      • 指向参数指定的成员
  • 如果找不到所属function,就是全局对象
    例如 在函数最外层直接 cosole.log(this)

Node.js环境

  • 由于文件代码中最顶层作用域实际上是一个伪全局环境,所以最顶层的this并不指向全局对象

严格模式下原本指向全局的 this 都会指向undefined

相关文章

  • 关于this指向的总结

    分析下面的代码指向,注意都是在非严格模式下面的指向 如果是在浏览器环境下调用,指向全局对象window, 如果在n...

  • This的指向总结

    1、//定时器中this的指向 结论:如果由定时器调用执行了某个函数,函数中有this,则这个this指向wind...

  • this指向总结

    1. 作为对象的方法调用 this指向该对象 2.当作为普通函数调用 this指向全局对象在浏览器js中,全局对象...

  • this指向总结

    全局环境下 在全局环境下,this 始终指向全局对象(window), 无论是否严格模式; 函数上下文调用 函数直...

  • This指向总结

    函数调用 普通调用:this指向Window(在严格模式下,this指向undefined) 宽松模式image....

  • this指向总结

    总结: 纯粹的函数调用:指向全局 作为对象方法的调用:指向对象(调用者) 构造函数调用:构造函数中的this指向n...

  • this指向总结

    1.简述this的指向问题 关于this的指向,记住最核心的一句话:哪个对象调用函数,函数里面的this指向哪个对...

  • 关于this指向

    1 首先this是和执行上下文绑定的,而执行上下文分为三种: (1) 全局执行上下文 在全局上下文中打印conso...

  • 关于this指向

    关于this指向 1.在全局函数下,函数内的this默认指向window2.在严格模式下,函数内的this指向un...

  • OC基础-isa(4)

    isa,superClass总结先上图 总结:a.instance的isa指向classb.class的isa指向...

网友评论

      本文标题:关于this指向的总结

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