从同一对象内的另一函数引用对象内的函数。JavaScript对象文本形式
在下面的代码中,当我试图从从同一对象内的另一函数引用对象内的函数。JavaScript对象文本形式,javascript,Javascript,在下面的代码中,当我试图从ArrayRotation对象中的userInputOn函数内部调用promptUpdater函数时,我得到一个类型错误:无法读取未定义的属性promptUpdater 我猜,这是代码的最后一行rotationTaskObj.userInputOn()我需要更正引用的地方,但我无法做到 'use strict'; var ArrayRotation = { arr : [], promptUpdater : function() { //co
ArrayRotation
对象中的userInputOn
函数内部调用promptUpdater
函数时,我得到一个类型错误:无法读取未定义的属性promptUpdater
我猜,这是代码的最后一行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
函数的正确方法是什么?您的问题在于您试图调用this.promptUpdater()
,this
不是您所认为的此
的作用域是当前函数,它是您的函数(解析、拒绝)
,而不是您的对象
使用.bind的传统函数方法
如果您不想使用箭头函数(应该,但我不会判断:-)),可以使用bind()方法设置函数的this
值:
要更改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) {
到
箭头函数没有this
像普通函数一样,它们从宿主函数中拾取this
这里有一个小问题:“您的问题是您试图调用this.promptUpdater()
,这不是您所认为的。这
的作用域是当前函数,它是您的函数(resolve,reject)
,而不是您的对象
使用.bind的传统函数方法
如果您不想使用箭头函数(应该,但我不会判断:-)),可以使用bind()方法设置函数的this
值:
要更改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) {
到
箭头函数没有this
像普通函数一样,它们从宿主函数中拾取this
这里有一个问题:“这是一个问题,此
引用在Promise的回调函数中“丢失”。有许多修复程序,但从ES6开始,最简单的方法是使用箭头功能:
new Promise ((resolve, reject) => {this.promptUpdateUser();})
这是Promise的回调函数中的This
引用“丢失”的问题。有许多修复程序,但从ES6开始,最简单的方法是使用箭头功能:
new Promise ((resolve, reject) => {this.promptUpdateUser();})
我用fat-arrow函数得到了预期的输出。相反,整个想法并不是将传统的这种绑定与fat-arrow词法绑定混合在一起,我使用fat-arrow函数得到了预期的输出。相反,整个想法并不是将传统的这种绑定与胖箭头词汇绑定相混合。