gpt4 book ai didi

javascript 类 - 使用 setInterval 调用的 this.method

转载 作者:行者123 更新时间:2023-11-30 08:59:53 27 4
gpt4 key购买 nike

我有一个 JavaScript 类

function MyClass() {

MyClass.prototype.fooMethod = function () {
// some logic goes here...
}

MyClass.prototype.fooMethod2 = function () {
this.fooMethod();
}
}

当我这样调用时,一切都按预期工作:

var m = MyClass();
m.fooMethod2();

然而,当我通过 setInterval 调用这段代码时,我得到一个错误:“Uncaught TypeError: Object [object DOMWindow] has no method 'fooMethod'”

var m = MyClass();
var intervalId = setInterval(m.fooMethod2, 100);

有什么方法可以使用 setInverval 来调用我的方法吗?

最佳答案

setInterval(function() {
m.fooMethod2();
}, 100);

在 javascript 中,上下文(this 的值)由调用方法的方式设置。所以 foo.bar() 将在 bar 函数内将 this 设置为 foo

但是当你返回一个由其他东西运行的函数的引用时,上下文不会被保留。检查一下:

var callLater = function(fn) {
setTimeout(function() {
fn(); // no defined context, `this` will revert to the default: `window`
}, 1000);
};
callLater(foo.bar);

在这段代码中,我们将一个函数传递给 callLater 函数。但是当我们调用 fn() 时,我们没有任何接收器,这意味着我们失去了上下文。

因此,任何时候函数上下文都很重要,您必须传入一个匿名函数,该函数将显式调用对象上的方法。

关于javascript 类 - 使用 setInterval 调用的 this.method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10129363/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com