javascript - 设置间隔函数不作为方法

标签 javascript oop object methods constructor

<分区>

谁能告诉我为什么 setInterval 在此代码中不起作用。我可能遗漏了一些东西,但我不确定它是什么。我正在尝试运行方法 args.counts();

错误是:

Uncaught TypeError: this.cast is not a function at Caste.log (prototype.js:17)

    function Caste(){
    this.name = 'James';
    this.surname = 'Penn';
    this.age = 38;

    this.one = document.getElementById('one');
    this.two = document.getElementById('two');

    this.cast = function(){
         return  this.age;
    }
    // ------------------------

    this.log = function(){
        console.log(this.cast());
    }
    // ------------------------
    this.display = function(){
        this.one.innerHTML = this.age;
    }

    this.counts = function(){
     (setInterval(this.log, 2000));
    }
}

// ----------------------

let args = new Caste();
args.counts();

最佳答案

setIntervalwindow.setInterval的简写,意思是调用上下文是window,而不是实例化的对象。将函数绑定(bind)到实例化对象:

(setInterval(this.log.bind(this), 2000));

或者使用箭头函数:

(setInterval(() => this.log(), 2000));

关于javascript - 设置间隔函数不作为方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50314290/

相关文章:

c# - 我的第一个 C# 应用程序和第一个空对象异常

java - java中的函数作为私有(private)成员变量

javascript - 根据值对 javascript 中的对象键进行排序

JavaScript - Date()、new Date() 和 ISODate 之间的区别

用于处理大型 XML 的 Java OO 设计

javascript - JS - 构造函数中的 JSON/ARRAY 传递变量(自定义库)

javascript - 不循环地从对象中删除某些属性

javascript - 两个onClick Action 一个按钮

javascript - 读取使用 CCUserDefault 保存的数据

c# - OOGenerics 设计注意事项