关于 JavaScript 中 this 的指向

2021-07-09  本文已影响0人  奕玄

🎯总结

全局环境

无论是否在严格模式下,this 均指向 window 对象。

console.log(this === window)  // true
// 严格模式
'use strict'
console.log(this === window)  // true

普通函数

  1. 正常模式

    • this 指向 window 对象
    function test() {
      return this === window
    }
    
    console.log(test())  // true
    
  2. 严格模式

    • this 值为 undefined
    // 严格模式
    'use strict'
    
    function test() {
      return this === undefined
    }
    
    console.log(test())  // true
    

构造函数

函数作为构造函数使用时,this 指向构造出来的实例

function Test() {
  this.number = 1
}

let test1 = new Test()

console.log(test1.number)  // 1

箭头函数

函数为箭头函数时,this 指向函数定义时上一层作用域中的 this 值。

let test = () => {
  return this === window
}

console.log(test())  // true
let obj = {
  number: 1
}

function foo() {
  return () => {
    return this.number
  }
}

let test = foo.call(obj)

console.log(test())  // 1

对象的方法

函数作为对象的方法使用时,this 指向该对象

let obj = {
  number: 1,
  getNumber() {
    return this.number
  }
}

console.log(obj.getNumber())  // 1

call()、apply()、bind()

let obj = {
  number: 1
}

function test(num) {
  return this.number + num
}

console.log(test.call(obj, 1))  // 2

console.log(test.apply(obj, [2]))  // 3

let foo = test.bind(obj, 3)
console.log(foo())  // 4
上一篇 下一篇

猜你喜欢

热点阅读