【问题标题】:How do I call another method from within the same class in Javascript如何从 Javascript 中的同一类中调用另一个方法
【发布时间】:2019-07-30 07:44:35
【问题描述】:

我知道以前有过这样的问题,但我已经尝试了答案,但仍然失败并出现错误:

__salaryTypeFromWeekday 不是函数。

我尝试在构造函数中使用“bind”,使用“this”调用函数,并更改函数声明以包含“this”关键字。

class SalaryType {
  constructor(selectedSalaryType) {
    this.selectedSalaryType = selectedSalaryType;
    this.__salaryTypeFromWeekday = this.__salaryTypeFromWeekday.bind(this)
  }

  get selected() {
    return this.selectedSalaryType;
  }

  static __updateSalaryType(typeOfDayStr, statusStr)
  {
    var typeOfDay = parseInt(typeOfDayStr, 10);
    var status = parseInt(statusStr, 10);
    switch(typeOfDay) {
      case WEEK_DAY:
        this.selectedSalaryType = this.__salaryTypeFromWeekday(status);
        break;
    }
    return this.selectedSalaryType;
  }

  __salaryTypeFromWeekday(status) {
    switch(status) {
      case WORK_ATTENDANCE:
        return SALARY_KIND_NORMAL;
      default:
        return null;
    }
  }
}

【问题讨论】:

  • 你怎么称呼它?
  • this.__salaryTypeFromWeekday(status);它返回一些东西并将被放入 this.selectedSalaryType.
  • 您的代码是一个类定义。您可以发布导致错误的代码吗? + 在你的 __salaryTypeFromWeekday method 中,WORK_ATTENDANCE 是什么?它应该是一个变量或一个字符串,否则它会抛出一个ReferenceError
  • __updateSalaryType 被标记为静态,没有可用的this
  • WORK_ATTENDANCE 是类外的全局常量,但在同一个 js 文件中。没有问题。问题在于调用 __salaryTypeFromWeekday 方法。

标签: javascript function class ecmascript-6 es6-class


【解决方案1】:

我很确定问题在于您从 static 函数调用 __salaryTypeFromWeekdays,该函数没有“this”实例,因为它在类而不是实例上运行。因此,您应该将 __salaryTypeFromWeekdays 转换为静态函数,或者将 __updateSalaryType 传递给该类的实际实例并像这样使用它: instance.__salaryTypeFromWeekdays.

【讨论】:

  • 谢谢。我将 __salaryTypeFromWeekdays 函数转换为静态函数,它现在可以工作了。在调用另一个静态函数时,我仍然需要使用“this”关键字。我是 Javascript 的初学者,所以 Javascript 课程对我来说似乎很难。
  • @Lorenz 不应该将__salaryTypeFromWeekdays 设为静态,而应将__updateSalaryType 设为非静态。它显然在一个实例上运行(使用this.selectedSalaryType)。你当初为什么选择static
  • 我的老板告诉我要将我负责创建的类的功能设为静态。我将它们全部更改为非静态并改用实例,它也可以工作。将不得不和我的老板谈谈这件事。谢谢!
  • @Lorenz 就像 Bergi 所说,拥有非静态函数通常比静态函数更好。你的老板可能有一个特殊的原因,所以值得你和他坐在一起,了解他为什么想要他们静态,你可能会学到一些你不知道的新思维方式或概念:) ,如果我的回答对您有帮助,如果您可以通过单击我的答案附近的“V”将其标记为“已接受”并投票,我将不胜感激:D
【解决方案2】:

不要在构造函数中使用bind - 只需像您所做的那样定义方法就可以作为实例方法。

如果你想要一个静态方法,你应该使用static:

static __salaryTypeFromweekday(status) {
  // ...
}

【讨论】:

    猜你喜欢
    • 2011-01-15
    • 2017-10-17
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 2011-11-01
    • 2013-10-08
    • 2011-01-14
    • 1970-01-01
    相关资源
    最近更新 更多