JavaScript - "this"的所有者

标签 javascript class methods this console.log

我关注了一个 tutorial用于创建 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 实例?

http://www.quirksmode.org/js/this.html

我已经包含了硬编码值行和不起作用的“this”行。

谢谢,

杰兰特

最佳答案

如果你想让 this 属性保持一致,你应该绑定(bind)被调用的函数。

例如,

setInterval(function() {/* 代码在这里 */}.bind(this), 500)

这样,内部函数的 this 将与外部函数的相同。

关于JavaScript - "this"的所有者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24539521/

相关文章:

javascript - 在类函数中访问 JavaScript 类变量

javascript - Meteor 从另一个方法调用模板方法

javascript - Firebase user.sendEmailVerification() 不是函数

javascript - Chrome 中 Webkit 全屏导致布局变形

javascript - 使用此脚本通过单击外部关闭按钮时遇到问题

java - 你认为 class string 实现的接口(interface)在 Java 中可比吗

javascript - 如何从 highcharts 中删除 "Values"和 "series"?

python - 让所有属性出现在 python 的 `__dict__` 方法上

xcode - 从Sprite套件中的类调用方法?

methods - golang区分T和*T上的方法集的原因是什么?