所以,我最近在开发一个库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
是什么?谢谢!
答案 0 :(得分:3)
这里的问题与承诺无关。
你正在传递child.spawn
,这只不过是一个功能。你的承诺无法知道它属于child
,所以它所能做的就是召唤它。因此,this
很可能是null
,undefined
或window
对象。
您可以通过以下方式看到相同的行为:
var sp = child.spawn;
sp(); // <---- `this` is not `child` here
你可以通过以下方式解决这个问题:
.then(child.spawn.bind(child));
或做你已经做过的事。