js中的this丢失问题

2019-08-23  本文已影响0人  我的昵称在不在

一、问题引入

    var people = {
        age:'18',
        sport : function (name){
            console.log(name);
        }
    };
    var p = people.sport;
    p('liming');

这样可以执行没问题

    var getEle = document.getElementById;
    var div = getEle('div');
    console.log(div);
    
    这样执行有问题
  

同样是用一个指针指向一个对象的方法,然后通过这个指针直接调用方法。1没问题2有问题

二、对于问题的猜测


    var people = {
        age:'18',
        sport : function (name){
            console.log(name + this.age);
        }
    };
    var p = people.sport;
    p('liming');
    
    有问题
    

猜测:代码3有问题。所以猜测可能是由于代码2中document的getElementById方法中用到了this,由于指针div指向这个方法,然后用div直接调用,导致getElementById方法内部this的指向由document变成了window,以至于会失败。

三、尝试解决

    var getEle = (function (func) {
        return function () {
            return func.apply(document, arguments);
        }
    })(document.getElementById);

    var div = getEle('div');
    console.log(div);
    

调用的时候把this重新绑定到document,可以正常获取div。

欢迎交流!

上一篇下一篇

猜你喜欢

热点阅读