秒懂JS中的this指向

135 阅读1分钟

六种this指向,看了就秒懂

1.以函数形式调用时,this永远都是window
function fun(a,b){
  console.log("a = "+a+",b = "+b)
  console.log(this);  //[object Window]
}
fun(123,456)
2.以方法的形式调用时,this是调用方法的对象
var person = {
  name:"钢铁侠",
  sex:"男",
  show:function(){
        alert(person.name);
        alert(this.name);//两者输出结果一样
      }
}
person.show()
3.以构造函数的形式调用时,this指向的是新创建的实例对象
function Person(){
   this.obj='李四'
}
const p = Person()
console.log(p.obj) // 李四
4.使用call和apply调用时,this是指定的那个对象
5.箭头函数:箭头函数的this看外层是否有函数 如果有,外层函数的this就是内部箭头函数的this如果没有,就是window
6.特殊情况:通常意义上this指针指向为最后调用它的对象。这里需要注意的一点就是如果返回值是一个对象,那么this指向的就是那个返回的对象,如果返回值不是一个对象那么this还是指向函数的实例
function show(){
  alert(this)
} 
show()         //obj window
window.show()  //obj window
7,给元素的某一个事件绑定一个方法如(button.onclick = fn()),当事件触发执行方法,方法中的this就是当前元素(button)
window.onload = function(){
  var obtn = document.getElementById("btn")
  obtn.onclick = function(){
    alert(this);//指向button
  }
}
<button id="btn">button</button>