js中this指向情况

110 阅读1分钟

JavaScript中this指向

在js中this指向不是固定不变的,它会随着执行环境的改变而改变。

  • this默认指向全局对象。
  • 在方法中,this表示该方法所属的对象。
  • 定时器的this永远指向window,除非使用bind、call和apply等函数人为的改变指向
  • 在事件中,this 表示接收事件的元素。
  • 在函数中,this 表示全局对象。

全局函数

 console.log(this); //window
 function fn() {
   console.log(this); //winsow
 }
 fn();

构造函数

指向实例对象

    function Person(name, age) {
      console.log(this);//指向zs/ls
      this.name = name;
      this.age = age;
    }
    var zs = new Person('zhangsan', 18);
    var ls = new Person('lisi', 20);

对象的方法

指向对象

    var obj = {
      fn: function () {
        console.log(this);
        console.log(this === obj) //true
      }
    }
    obj.fn();

事件处理函数

指向事件源对象

    var btn = document.querySelector('#btn');
    btn.onclick = function () {
      console.log(this); //指向btn
    }
    var btn = document.querySelector('#btn');
    btn.addEventListener('click', function () {
      console.log(this); //指向btn
    })

定时器回调函数

指向window对象

  setTimeout(function () {
      console.log(this); //window
    }, 1000)