Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从同一对象内的另一函数引用对象内的函数。JavaScript对象文本形式_Javascript - Fatal编程技术网

从同一对象内的另一函数引用对象内的函数。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函数得到了预期的输出。相反,整个想法并不是将传统的这种绑定与胖箭头词汇绑定相混合。