js中this指向问题

1、概念

  • 函数中的this指向
    • 非严格模式下this指向全局变量window
    • 严格模式下this为undefined
  • 对象中的this指向:指向该对象本身
  • 类中的this指向:指向该对象的实例对象
  • this指向的修改问题

2、函数中的this指向

①非严格模式

function cell(){
  console.log(this);
}
cell();

②严格模式

function cell(){
  "use strict";
  console.log(this);
}
cell();

3、对象中的this指向

  let obj={
      name:"hello",
      describe:function(){
        console.log(this);
     }
  }
  obj.describe();

4、类中的this指向

...

...

执行结果:

结论:类中方法的this指向当前的实例对象,方法放在实例对象的原型链上。

...

...

执行结果:

分析一下结果,当前实例对象把原型上的方法引用赋值给hello变量,此时hello调用时this指向已经被修改,所以调取不到name,那么this变成了什么呢,我们来打印一下。

发现是undefined,为什么呢?

前面我们已经说了function在非严格模式下是window,严格模式下是undefined,这里类中方法默认采用严格模式。

5、this指向的修改问题

修改this的三种方法:

    • 通过A.call(对象,arg1,arg2,...)
    • A.apply(对象,[arg1,arg2,...])
    • let A=bind(对象,arg1,arg2,...)

你可能感兴趣的:(JS,javascript,前端,开发语言)