在下面的代码中,当我尝试从promptUpdater
对象中的userInputOn
函数内部调用ArrayRotation
函数时,我收到一个 TypeError:无法读取未定义的属性hintUpdater。
我想这是我需要更正引用的代码rotationTaskObj.userInputOn();
的最后一行,但是我做不到。
'use strict';
var ArrayRotation = {
arr : [],
promptUpdater : function() {
//code
},
userInputOn : function() {
return new Promise(function(resolve, reject) {
this.promptUpdater(); //correct way to reference promptUpdater fn?
});
},
}
let rotationTaskObj = Object.create(ArrayRotation);
let userInputPr = rotationTaskObj.userInputOn(); //My guess, I need to create correct refernce here, not able to get how to do that?
引用promptUpdater
函数的正确方法是什么?
答案 0 :(得分:3)
您的问题是您尝试呼叫this.promptUpdater()
的地方,this
不是您想的那样。 this
的作用域是当前函数,即您的function(resolve, reject)
,而不是您的对象。
具有.bind
的传统函数方法
如果不想使用箭头功能(应该,但我不会判断:-),则可以使用this
方法设置函数的bind()
值:>
要更改userInputOn
以将其绑定到其父母的this
:
userInputOn : function() {
return new Promise(function(resolve, reject) {
this.promptUpdater(); //correct way to reference promptUpdater fn?
}.bind(this));
},
箭头功能方法
更改
return new Promise(function(resolve, reject) {
收件人
return new Promise((resolve, reject) => {
箭头功能没有普通功能的this
,它们从托管功能中提取了this
。
这是一个小提琴:“ https://jsfiddle.net/jmbldwn/fpa9xzw0/5/
答案 1 :(得分:1)
这是一个问题,this
参考在Promise的回调函数中被“丢失”。有许多修复程序,但是从ES6开始,最简单的方法是使用箭头功能:
new Promise ((resolve, reject) => {this.promptUpdateUser();})