跳到主要内容

简述JavaScript this通常指向 ?

参考答案:

在JavaScript中,this关键字的指向是由其所在的上下文决定的,具体指向什么取决于它是如何被调用的。以下是一些常见的情况:

  1. 全局上下文:在全局作用域或函数外部,this通常指向全局对象。在浏览器环境中,这通常是window对象。
console.log(this); // window
  1. 对象方法:当this被用作一个对象的方法时,它通常指向调用该方法的对象。
const obj = {
  prop: 'Hello',
  method: function() {
    console.log(this.prop); // 'Hello'
  }
};
obj.method();
  1. 构造函数:当this被用作构造函数(即使用new关键字调用的函数)时,它指向新创建的对象。
function MyConstructor() {
  this.prop = 'Hello';
}
const obj = new MyConstructor();
console.log(obj.prop); // 'Hello'
  1. 箭头函数:箭头函数不绑定自己的this,而是使用它被定义的上下文中的this。也就是说,箭头函数会捕获其所在上下文的this值作为自己的this值。
const obj = {
  prop: 'Hello',
  method: () => {
    console.log(this.prop); // undefined,因为箭头函数中的this指向的是定义它的上下文,而不是调用它的上下文
  }
};
obj.method();
  1. 函数调用:如果this被用作一个普通的函数调用(即不是作为对象的方法或构造函数调用),那么this通常指向全局对象。但是,在严格模式('use strict')下,它会是undefined
function myFunc() {
  console.log(this);
}
myFunc(); // window(在非严格模式下)或 undefined(在严格模式下)
  1. 事件处理函数:在DOM事件处理函数中,this通常指向触发事件的元素。
const btn = document.getElementById('myButton');
btn.addEventListener('click', function() {
  console.log(this); // 触发点击事件的按钮元素
});

请注意,this的指向可能受到一些其他因素的影响,如callapplybind方法,这些方法可以改变函数的this上下文。