this 指向

289 阅读1分钟

1、全局环境中的this

  • 浏览器环境:this指向全局对象window
  • node环境:this都是空对象{}

2、new一个实例化对象

this指向最后调用它的对象

new的实现原理

  • 创建一个空的简单JavaScript对象(即{});
  • 链接该对象(即设置该对象的构造函数)到另一个对象 ;
  • 将步骤1新创建的对象作为this的上下文 ;
  • 如果该函数没有返回对象,则返回this。

3、箭头函数

  • 箭头函数的this始终指向函数定义时的this,而非执行时

4、显示绑定:bind()、call()、apply()

  • bind()方法创建一个新的函数, 当被调用时,将其this关键字设置为提供的值,在调用新函数时,在任何提供之前提供一个给定的参数序列。
  • call() 方法使用一个指定的 this 值和单独给出的一个或多个参数来调用一个函数。
  • apply() 方法调用一个具有给定this值的函数,以及作为一个数组(或类似数组对象)提供的参数。

区别

  • call()和apply()是立即执行函数,只是接受的参数形式不同
    • fun.call(thisArg[, arg1[, arg2[, ...]]])
    • fun.apply(thisArg, [argsArray])
  • allly()是创建一个新的包装函数,并且返回,而不是立即执行
    • fun.bind(thisArg, arg1, arg2, ...)