从同一对象内的另一个函数引用一个对象内的函数。 JavaScript对象文字形式

时间:2018-11-06 07:01:36

标签: javascript

在下面的代码中,当我尝试从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函数的正确方法是什么?

2 个答案:

答案 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();})