【问题标题】:Javascript getter methods seems to not workJavascript getter 方法似乎不起作用
【发布时间】:2021-09-13 21:06:16
【问题描述】:

大家好,我最近刚开始使用 javascript,我正在尝试学习类和对象,但我遇到了一个我无法通过的小问题,所以这是我的代码

class bubbleSorter{
  constructor(/*params*/){
  //some fields
  }
  #bubbleSorter = () =>{
  //some code
  }

  getBubbleSorter = () =>{
    this.#bubbleSorter();
  }
}

let obj = new bubbleSorter(/*params*/);

console.log(obj.getBubbleSorter());

所以这是我的代码示例。 每当我尝试记录 getter 方法时,它并不能很好地工作,但是当我改为调用 bubbleSorter 方法时——假设我删除了 # 符号——它神奇地工作我不知道为什么会发生这种情况我尝试将 bubbleSorter 公开然后调用它在 getBubbleSorter 里面还是不行

【问题讨论】:

  • 不要将箭头函数用作类方法。
  • @Barmar 怎么来的?
  • 因为它们没有将this 传递给它们,所以它们保留了定义时的原始this
  • get bubbleSorter() { /*somecode*/ }
  • 请发minimal reproducible example 并解释代码应该做什么。

标签: javascript class object methods getter


【解决方案1】:

getBubbleSorter 调用this.#bubbleSorter 但没有返回值,导致函数返回undefined

【讨论】:

    【解决方案2】:

    您的示例中似乎没有返回任何内容。专门针对

    getBubbleSorter = () =>{
      this.#bubbleSorter();
    }
    

    如果你改成

    getBubbleSorter = () =>{
      return this.#bubbleSorter();
    }
    

    我想你会开始得到你所期望的。您的示例目前正在做的最后相当于

    console.log(() => {}());
    

    现在它正在执行一个没有返回值的函数,所以它注销了 undefined。在上面添加 return 后,您将记录您的私有 getter 的结果。

    【讨论】:

      猜你喜欢
      • 2012-08-25
      • 1970-01-01
      • 2023-02-04
      • 1970-01-01
      • 1970-01-01
      • 2021-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多