使用JavaScript进行面向对象开发 互动版

在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器

解决this的问题

一般来说解决this的问题,主要就是解决两个问题

1、this变成widow以后,如何使用this

一般常见的做法是在定义内部方法前,使用var that = this;将this的引用放进that里,再在内部方法中访问that来实现

//计算出在线的时间
function getOnlineTime(now, unit){

    var that = this;

    var getHour = function(){
        var date = new Date();    //获取当前时间
        var logonTime = that.logonTime;    //通过that关键字获取到了上线时间
        //some code here;
    };

    if(unit == "h") return getHour();
};

2、this当完全不知道this可能是什么的时候,如何访问我想要访问的实例

一般常见的做法是避免在内部、嵌套、回调函数中使用this,而通过参数传递,我们可以把上面的例子改造成这种解决方式: function getOnlineTime(now, unit){

var getHour = function(e){
    var date = new Date();    //获取当前时间
    var logonTime = e.logonTime;    //通过that关键字获取到了上线时间
    //some code here;
};

if(unit == "h") return getHour(this);    //这里因为没有内部、嵌套、回调函数,所以this就是当前实例,于是将this作为参数传递,以保证getHour时的参数就是所需要的实例

}; ```