JavaScript - 调用Promises而不是函数时,“this”不起作用

时间:2015-04-20 19:02:10

标签: javascript function this promise

所以,我最近在开发一个库safe_children时遇到了一个非常奇怪的问题。

当我写这些例子时,我决定尝试这样做:

var child = new Child('otherFile.js', 3 * 60);
child.loadScript()
  .then(child.spawn);

此代码不起作用。 this指向我无法找到的东西。但是,这段代码可以工作:

var child = new Child('otherFile.js', 3 * 60);
child.loadScript()
  .then(function(){
    child.spawn();
  });

任何人都知道为什么?在这种情况下,this是什么?谢谢!

1 个答案:

答案 0 :(得分:3)

这里的问题与承诺无关。

你正在传递child.spawn,这只不过是一个功能。你的承诺无法知道它属于child,所以它所能做的就是召唤它。因此,this很可能是nullundefinedwindow对象。

您可以通过以下方式看到相同的行为:

var sp = child.spawn;
sp();    // <---- `this` is not `child` here

你可以通过以下方式解决这个问题:

.then(child.spawn.bind(child));

或做你已经做过的事。