JS中关于this指向

1、沿着作用域向上找最近一个function(不是箭头函数),看这个function是如何执行的
2 、this指向取决于所属function是如何调用的,而不是定义
3、function调用一般分为以下几种情况

  • 作为函数去调用,即:foo()
    指全局对象(globalThis),注意严格模式下的问题,严格模式下
    undefined
  • 作为方法去调用,即:obj.foo()
    指向最终调用这个方法的对象
  • 作为构造函数去调用,即:new Foo()
    指向一个新的对象Foo {}
  • 特殊调用,即:foo.call()、foo.apply()、foo.bind()
    指向参数指定成员
  • 找不到所属function,就是全局对象
// 1、作为函数去调用
function foo () {
  console.log(this)
}
foo()  // this指向全局对象(globalThis)

// 2、作为方法去调用
const obj = {
  foo: function() {
    console.log(this)
  }
}
obj.foo() // this指向obj这个对象

// 3、作为构造函数去调用
function Person() {
  console.log(this)
}
new Person()  // 指向Person {}这个新的对象

// 4、特殊调用
const obj = {
  name: 'jack'
}
function foo() {
  console.log(this)
}
foo.call(obj) // this指向obj这个对象
foo.call(1) // this指向1
-----------------------------------------------------
foo.apply(obj) // this指向obj这个对象
foo.apply(1) // this指向1
-----------------------------------------------------
foo.bind(obj)() // this指向obj这个对象
foo.bind(1)() // this指向1
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容