首页 > 解决方案 > 如何从另一个函数访问私有函数

问题描述

我在尝试访问另一个函数中的私有函数时收到错误消息

class GameController {
  public async cardShuffle (req: Request, res: Response): Promise<void> {
      other code here...

      const treatment = this.cardTreatment(shuffledCards)

      console.log(treatment)
    })
  }

  private cardTreatment (cards: Array<String | Number>): Array<String | Number> {
    return cards
  }
}

export default new GameController()

错误:

(节点:2645)UnhandledPromiseRejectionWarning:TypeError:无法读取未定义的属性“cardTreatment”

标签: typescript

解决方案


问题不在于该函数是私有的,而是在您调用它的上下文中thisundefined例如,您可能已经完成了const shuffle = controller.cardShuffle; shuffle().

见下文:

class Example {
    foo() {
        return this.bar();
    }
    bar() {
        return 'It works!';
    }
}

const test = new Example();

console.log(test.foo())

const foo = test.foo;

try {
    console.log(foo())
} catch(e) {
    console.log('Doesnt work');
}

console.log(foo.call(test))


推荐阅读