JavaScript中的静态方法可以调用非静态方法吗

网络

我很好奇,因为出现“未定义不是函数”错误。考虑以下类别:

var FlareError = require('../flare_error.js');

class Currency {

  constructor() {
    this._currencyStore = [];
  }

  static store(currency) {
    for (var key in currency) {
      if (currency.hasOwnProperty(key) && currency[key] !== "") {

        if (Object.keys(JSON.parse(currency[key])).length > 0) {
          var currencyObject = JSON.parse(currency[key]);
          this.currencyValidator(currencyObject);

          currencyObject["current_amount"] = 0;

          this._currencyStore.push(currencyObject);
        }
      }
    }
  }

   currencyValidator(currencyJson) {
    if (!currencyJson.hasOwnProperty('name')) {
      FlareError.error('Currency must have a name attribute in the json.');
    }

    if (!currencyJson.hasOwnProperty('description')) {
      FlareError.error('Currency must have a description attribute in the json.');
    }

    if (!currencyJson.hasOwnProperty('icon')) {
      FlareError.error('Currency must have a icon attribute in the json.');
    }
  }

  static getCurrencyStore() {
    return this._currencyStore;
  }

};

module.exports = Currency;

撇开重构,问题就在网上:this.currencyValidator(currencyObject);我收到错误“未定义不是函数”

我认为这是因为我有一个静态方法,其内部调用了一个非静态方法?非静态方法必须是静态的吗?如果这样的话,this.methodName仍然有效的概念仍然有效吗?

乔希

不可以,静态方法不能调用非静态方法。

考虑到您有对象a和的b两个实例CurrencycurrencyValidator存在于这两个对象上。现在store()属于类Currency本身,而不是这些对象之一。因此,在中Currency.store(),它如何知道要调用的对象currencyValidator()简单的答案是,事实并非如此。这是使用静态方法的陷阱之一,也是人们经常反对使用静态方法的原因之一。

无论如何,你可以通过解决这个问题a进入Currency.store(),并调用a.currencyValidator()来代替。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在静态方法中调用非静态方法

来自分类Dev

Javascript 子类中的实例方法可以调用它的父类静态方法吗?

来自分类Dev

静态方法可以访问非静态实例变量吗?

来自分类Dev

从不同的非静态类中调用非静态方法

来自分类Dev

从android中的静态方法调用非静态方法

来自分类Dev

从基类的静态创建方法中调用非静态方法

来自分类Dev

从android中的静态方法调用非静态方法

来自分类Dev

在非静态方法中调用的静态方法的早期绑定

来自分类Dev

从静态方法调用非静态方法

来自分类Dev

在Clojure中调用Java非静态方法

来自分类Dev

在Java中的静态方法中调用非静态方法(非静态变量错误)

来自分类Dev

从Java中的静态成员调用非静态方法

来自分类Dev

使用在静态方法中创建的实例,从静态方法中调用非静态方法

来自分类Dev

非静态方法.....不应静态调用

来自分类Dev

从静态内部类调用非静态方法

来自分类Dev

非静态方法不应静态调用

来自分类Dev

从静态内部类调用非静态方法

来自分类Dev

在Java中,可以通过多次调用的非静态方法使局部变量为final导致内存泄漏吗?

来自分类Dev

.Net 中的静态方法与非静态方法

来自分类Dev

无法调用非静态方法

来自分类Dev

为什么可以通过创建对象在main方法中调用非静态方法?爪哇

来自分类Dev

为什么可以通过创建对象在main方法中调用非静态方法?爪哇

来自分类Dev

扩展方法可以使用非静态字段吗?

来自分类Dev

从另一个非静态方法中调用非静态方法

来自分类Dev

从另一个非静态方法中调用非静态方法

来自分类Dev

Android Studio 中的非静态方法无法调用非静态方法

来自分类Dev

在非静态方法中调用没有类实例的非静态方法

来自分类Dev

我可以内联静态方法调用EF查询吗

来自分类Dev

我可以内联静态方法调用EF查询吗

Related 相关文章

  1. 1

    在静态方法中调用非静态方法

  2. 2

    Javascript 子类中的实例方法可以调用它的父类静态方法吗?

  3. 3

    静态方法可以访问非静态实例变量吗?

  4. 4

    从不同的非静态类中调用非静态方法

  5. 5

    从android中的静态方法调用非静态方法

  6. 6

    从基类的静态创建方法中调用非静态方法

  7. 7

    从android中的静态方法调用非静态方法

  8. 8

    在非静态方法中调用的静态方法的早期绑定

  9. 9

    从静态方法调用非静态方法

  10. 10

    在Clojure中调用Java非静态方法

  11. 11

    在Java中的静态方法中调用非静态方法(非静态变量错误)

  12. 12

    从Java中的静态成员调用非静态方法

  13. 13

    使用在静态方法中创建的实例,从静态方法中调用非静态方法

  14. 14

    非静态方法.....不应静态调用

  15. 15

    从静态内部类调用非静态方法

  16. 16

    非静态方法不应静态调用

  17. 17

    从静态内部类调用非静态方法

  18. 18

    在Java中,可以通过多次调用的非静态方法使局部变量为final导致内存泄漏吗?

  19. 19

    .Net 中的静态方法与非静态方法

  20. 20

    无法调用非静态方法

  21. 21

    为什么可以通过创建对象在main方法中调用非静态方法?爪哇

  22. 22

    为什么可以通过创建对象在main方法中调用非静态方法?爪哇

  23. 23

    扩展方法可以使用非静态字段吗?

  24. 24

    从另一个非静态方法中调用非静态方法

  25. 25

    从另一个非静态方法中调用非静态方法

  26. 26

    Android Studio 中的非静态方法无法调用非静态方法

  27. 27

    在非静态方法中调用没有类实例的非静态方法

  28. 28

    我可以内联静态方法调用EF查询吗

  29. 29

    我可以内联静态方法调用EF查询吗

热门标签

归档