【问题标题】:Javascript classes define attribute in constructor or outside the classJavascript 类在构造函数中或类外定义属性
【发布时间】:2019-08-17 01:17:00
【问题描述】:

我正在创建一个定义以下类的项目:

class BankAccount {
 constructor(balance=0){
   this.balance = balance;
 }

 withdraw(amount){
    if(this.balance - amount >= BankAccount.overdraftlimit){
      this.balance -= amount;
    }
  }
}

BankAccount.overdraftlimit = -500;

我的问题是关于属性的定义overdraftlimit

这是定义让我们调用全局属性的最佳方式吗? 或者应该更好地在constructor 之内定义它

this.overdraftlimit = -500;

谢谢!!

【问题讨论】:

  • 这取决于您的域。不同的银行账户可以有不同的overdraftlimit吗?银行账户应该能够改变它吗?
  • 感谢您的回复。不可以,其他银行账户不能变异,不同的银行账户会有不同的透支额度
  • 如果透支限制不是任何特定实例的一部分,那么将其定义为类本身的一部分是有意义的。否则将其作为您的实例状态的一部分。
  • 我个人会在构造函数中将此属性设置为默认值,并为其创建 setter 和 getter
  • 好的,所以我明白如果它被定义为类的一部分是独立于实例的,任何实例都不能改变它。

标签: javascript node.js class ecmascript-6


【解决方案1】:

如果overdraftlimit 在所有BankAccount 之间共享,则使用静态属性。

BankAccount.overdraftlimit = -500;

如果每个BankAccount 都有自己的overdraftlimit,那么它不应该是类的一部分,而是单个实例的一部分。

 constructor(balance = 0){
   this.balance = balance;
   this.overdraftlimit = -500;
 }

这样你也可以改变overdraftlimit而不影响其他BankAccount

【讨论】:

  • 哦,好的,我明白了。将其声明为静态属性使得该属性可以被所有实例共享。如果其中一个更改它,它将影响其他实例。正如您所说的那样,是类的一部分,而不是实例的一部分。这就是你的意思吧?很好的解释
  • 是的,就是这样
猜你喜欢
  • 2022-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-27
  • 1970-01-01
  • 2019-04-20
  • 2016-04-25
  • 2021-06-19
相关资源
最近更新 更多