js中函数内部的this指向问题

一、函数内部的this指向

函数内this的指向,是当我们调用函数的时候才能确定,调用方式的不同决定了this的指向不同

 

调用方式 this指向
普通函数调用 window
构造函数调用 实例对象,原型对象里面的方法也执行实例对象
对象方法调用 该方法所属的对象
事件绑定方法调用 绑定事件对象
定时器函数 window
立即执行函数 window

 

上述代码演示验证:

1、普通函数调用

  function fn() {
            console.log('普通函数this的指向为:' + this);
        }
        fn();

结果:

指向函数的调用者window,因为普通函数调用完整的写法是window.fn(),故此时this指向函数的调用者即window

2、对象的方法调用

   var o = {
            fn: function() {
                console.log('对象方法中的this指向:' + this);
            }
        }
        o.fn();

结果:

 

 

 

指向方法所属的对象o,对象o调用了fn()方法,故指向对象o

3、构造函数调用

 function Star() {
            console.log('构造函数中的this指向:' + this);
        }
        var lhc = new Star();

结果:

 

指向由构造函数所创建的实例对象lhc

特殊:构造函数原型对象prototype里面方法中的this也指向被创建的实例对象lhc

 function Star() {
            // console.log('构造函数中的this指向:' + this);
        }
        Star.prototype.fn = function() {
            console.log('构造函数原型对象里方法中的this指向:' + this);
        }
        var lhc = new Star();
        lhc.fn();

结果:

指向由构造函数所创建的实例对象lhc

4、绑定事件函数

var btn = document.querySelector("button");
    btn.onclick = function() {
        console.log('绑定事件里面this的指向:' + this);
    };

结果:

 

 

 

指向函数的调用者,btn这个按钮对象

5、定时器函数

 window.setInterval(function() {
        console.log('定时器函数里面的this指向:' + this);
    }, 1000)

结果:

 

指向函数的调用者window对象

6、立即执行函数

 (function() {
        console.log('立即执行函数里面的this指向:' + this);
    })();

结果:

指向函数的调用者window对象,立即执行函数不需要调用立即可以执行,同普通函数一样

posted @ 2021-07-03 11:26  蛋蛋仔  阅读(566)  评论(0编辑  收藏  举报