首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这是在setImmediate电话中丢失的吗?

这是在setImmediate电话中丢失的吗?
EN

Stack Overflow用户
提问于 2016-10-24 17:25:22
回答 1查看 596关注 0票数 2

在这种情况下,方法必须递归地、异步地通过setImmediate调用自己。

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

代码语言:javascript
复制
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“在某个时候不再是一个函数,我不理解它:

代码语言:javascript
复制
> 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)
> 

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

代码语言:javascript
复制
setImmediate(this.someMethod.bind(this), index + 1);

但我不明白为什么setImmediate会这样做。有人能给我提供一些关于它的链接吗?我真的很感激你的帮助。我花了几个小时试图找出答案。提前谢谢。

-编辑:也可以,可以建议更好的标题或编辑。我的英语水平很差。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-24 17:28:16

当您使用高阶函数时,您将失去上下文。您有三个选项:在闭包中存储ref到this,绑定传递的函数,或者不使用this

代码语言:javascript
复制
// 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);
    });
  }
};
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40224077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档