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/29626108/

相关文章:

oop - 为什么没有为不同的返回类型定义方法重载?

c# - 将 "reference type"作为参数传递给具有 'ref' 键的方法是否有意义?

javascript - 如何使用 font Awesome 增加加载图标的字体大小

javascript - 如何转换基于 Msxml2.XMLHTTP 的仅 IE 网站,使其也适用于 Firefox?

javascript - 使用 fetch() 的 POST 请求返回 204 No Content

php - 在类中使用类?

jquery - 在 jQuery 的 .closest() 中使用类名

VB6 集合删除不会触发 Class_Terminate

ruby-on-rails - 在 ruby​​ (NoMethodError) 模块中定义一个方法

javascript - 如何从 Object.keys 函数返回的 MapIterator 快速检索值?