小编典典

JavaScript-“ this”的所有者

javascript

我遵循了有关创建JavaScript秒表,并试图将其扩展为可与多个秒表(一个类的多个实例)一起使用。我遇到的问题是,当我试图在时钟滴答声中显示当前值时,我需要使用“this”对类实例进行硬编码,这是行不通的(在我使用console.log的那一行中)。我已将代码缩减到最低限度以尝试理解这一方面,并​​粘贴了以下内容:

function Timer(){
    var time1 = null;
    var time2 = null;
    var timeLoop = null;

    function getTime(){
        var day = new Date();
        return day.getTime();
    }

    this.start = function(){
        time1 = getTime();

        timeLoop = setInterval(function(){
            time2 = getTime();
            console.log(_Timer.duration());
            //console.log(this.duration());
        },500);
    }

    this.duration = function(){
        return (time1 - time2) / 1000;
    }

}

我认为以下链接描述了我的问题,但我对它的理解不足以在此处应用。问题是由于所有者是this.start而不是仅此而引起的,我如何修改代码以使其与Timer的任何实例一起使用?

我已经包括了硬编码的值行和行不通的“ this”行。

谢谢,


阅读 347

收藏
2020-05-01

共1个答案

小编典典

如果要使this属性一致,则应绑定正在调用的函数。

例如,

setInterval(function() { /* code here */ }.bind(this), 500)

这样,this内部功能的便与外部功能的相同。

2020-05-01