javascript - 调用 setTimeout 时出现 NaN 错误

标签 javascript

我正在尝试使用一个调用自身并被计数器破坏的 setTimeout 函数。但是,我不断收到 NaN 错误。有人可以帮助我吗?

<script language="javascript">
    function Tests() {
        this.i = 0;
    }


    Tests.prototype.increment_test = function () {
        if (this.i > 2) {
            return;
        }
        alert(this.i);
        this.i++;

        setTimeout(this.increment_test, 30);
    }

    ta = new Tests();
    ta.increment_test();
</script>

最佳答案

this 未永久绑定(bind)到 increment_test 函数。

您可以在变量中引用 this,并在匿名函数中使用它。

var self = this;
setTimeout(function() { self.increment_test()}, 30);

或者您可以使用 Function.prototype.bind 将调用上下文绑定(bind)到函数。

setTimeout(this.increment_test.bind(this), 30);

或者您可以制作一个绑定(bind)上下文的小工具。

function _bindCtx(fn, ctx) {
    return function() { return fn.apply(ctx); };
}

然后这样调用它。

setTimeout(_bindCtx(this.increment_test, this), 30);

关于javascript - 调用 setTimeout 时出现 NaN 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12390385/

相关文章:

php - API 在 WordPress 中上传文件

javascript - 更改 jQuery UI 自动完成结果框样式

javascript - 每个方法中的 if-else (jQuery)

javascript - 您可以向有状态组件传递一个在 componentDidMount() 内部运行的函数吗?

javascript - 如何在数组中转换数组

javascript - 从 javascript 将 Click 事件放置在 html 中的 anchor 标记上?

javascript - 嵌套的 div 标签宽度

javascript - Jaxer 的优点和缺点

javascript - Chrome 扩展程序内容脚本未触发代码

javascript - 如何使用 PEG.js 的示例