对this的理解,三种改变this的方式
- 1.任何情况下直接在script中写入的this都是window。
- 2.函数中的this 非严格模式:this指向window, 严格模式时:this指向undefined。
- 3.箭头函数的this this都指向箭头函数外上下文环境的this指向
- 4.对象中this 对象属性的this 指向对象外上下文环境的this 对象方法(普通函数)中的this,指向当前对象(谁执行该方法,this就指向谁)
- 5.回调函数的this指向
- 1)、 setTimeout,setInterval回调函数不管是否是严格模式都会指向window。
- 2)、通过在函数内执行当前回调函数 非严格模式:this指向window, 严格模式时:this指向undefined。
- 3)递归函数中的this 非严格模式:this指向window, 严格模式时:this指向undefined。 - 使用arguments0执行函数时 this指向arguments。
- 5)事件中的回调函数,this指向事件侦听的对象(e.currentTarget);
- 6、call,apply,bind方法执行时this的指向 - 如果call,apply,bind传参时,第一个参数传入的不是null或者undefined,传入什么this指向什么 - 如果第一个参数传入的是null或者undefined ,非严格模式下指向window
- 7、在ES6的类中this的指向 - 构造函数中的this指向实例当前类所产生的新的实例对象 - 类中实例化方法中this指向谁执行该方法,this指向谁 - 类中静态方法中this执行该类或者该类的构造函数 - 类中实例化箭头方法,this仍然指向当前类实例化的实例对象
- 8、ES5的原型对象中this的指向 - 在原型的方法中,this指向实例化当前构造函数的实例化对象(谁执行该方法,this指向谁); - 三种改变this指向的方式 - 函数名.call(this,....)this写谁就指谁。 - 函数名.apply(this,[参数1,参数2,...]) this写谁就指谁。 - 函数名. bind (this,1,2,3) this写谁就指谁。