this
引用在回调函数中变为未定义(请参见下面的代码)。
我可以使用 fat arrow函数和回调函数上的.bind(this)
达到预期的效果,我知道原因。
它取决于回调的高阶函数的调用位置。
我已阅读以下链接中的内容丰富的文章,这些文章讨论高阶函数的调用站点。 YDNJS和Mastering this in callbacks
我不明白的是,此引用丢失并在我的代码回调中变得不确定的原因。据我所知,在回调之前,呼叫站点有权引用this
。是否因为该语言的内部实现细节?如果是,那是什么?
'use strict';
var ArrayRotation = {
init : function(arr) {
this.arr = arr;
},
promptUpdater : function() {
//code
},
userInputOn : function() {
//*this* reference correct upto this point.
return new Promise(function(resolve, reject) {
this.promptUpdater(); //*this* reference getting lost here. Becomes undefined.
});
},
}
let rotationTaskObj = Object.create(ArrayRotation);
rotationTaskObj.init([]);
rotationTaskObj.userInputOn();