gpt4 book ai didi

javascript - “这个”在 setImmediate 调用中丢失了吗?

转载 作者:行者123 更新时间:2023-11-30 11:48:15 25 4
gpt4 key购买 nike

在我的情况下,方法必须通过 setImmediate 递归和异步地调用自身。

下一个代码与原始代码没有任何关系,但出现了同样的“问题”:“this”引用似乎在第二次调用时丢失了。

function A () {
this.some_message = 'Index is: ';
}

A.prototype.someMethod = function (index) {
console.log(`${this.some_message} ${index}`);
setImmediate(this.someMethod, index + 1);
}

我有下一个输出,其中“this.someMethod”在某个时候不再是一个函数,我不理解它:

> new A().someMethod(1)
Index is: 1
undefined
> undefined 2
TypeError: "callback" argument must be a function
at exports.setImmediate (timers.js:664:11)
at Immediate.A.someMethod (repl:3:1)
at runCallback (timers.js:639:20)
at tryOnImmediate (timers.js:610:5)
at processImmediate [as _immediateCallback] (timers.js:582:5)
>

我通过将方法的最后一行更改为:

setImmediate(this.someMethod.bind(this), index + 1);

但我不明白为什么 setImmediate 会这样。谁能给我一些关于它的链接?我真的很感激任何帮助。我已经花了几个小时试图找到答案。提前致谢。

-- 编辑:另外,请随意提出更好的标题或修订。我的英语水平很差。

最佳答案

任何时候你使用高阶函数,你都会失去上下文。您有三个选择:在闭包中存储对 this 的引用,绑定(bind)您传递的函数,或者不使用 this

// using Function.prototype.bind
var foo = { value: 3 };
foo.method = function() { return this.value };

function doesAsync() {
setImmediate(foo.method.bind(foo));
}

// using a closure
var bar = {
value: 3,
method: function() {
var self = this;
setImmediate(function() {
alert(self.value);
});
}
};

关于javascript - “这个”在 setImmediate 调用中丢失了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40224077/

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