【问题标题】:Javascript: Difference between writing property of a class in a concstructor or outside of it?Javascript:在构造函数中或外部编写类的属性之间的区别?
【发布时间】:2019-12-28 19:49:05
【问题描述】:

在类构造函数内部或外部编写属性有什么区别?

例如,这两个例子中写属性“legs”有什么区别:

1)

class Rabbit{
  constructor(){
  this.legs= 4
  }
}

2)

 class Rabbit{
   legs = 4;
 }

【问题讨论】:

    标签: javascript class javascript-objects


    【解决方案1】:

    第二个选项需要babel-plugin-proposal-class-properties插件,第一个不需要。

    【讨论】:

      【解决方案2】:

      要在类中动态使用property。这样想,只要class 用任何值实例化,constructor 就会更改或分配属性。并且构造函数之外的属性是默认的。如果我们不在类中编写任何构造函数定义,它将无法在实例化中获取新值。每当我们实例化该类时,都会触发构造函数/方法,它将根据需要或想要的方式构造所有内容。

          class Rabbit{
            legs= 4
      
            constructor(lg){
               this.legs= lg
            }
          }
      const r = new Rabbit(2);//we override its value 4 to 2
      

          class Rabbit{
             legs = 4;
           }
      const r = new Rabbit(3);//we don't override its value 4 to 3,it will be 4
      

      【讨论】:

      • 是的,我知道我们只能通过构造函数来动态使用属性。在您的第一个示例中,我们还可以在构造函数中写入默认值,并且根本不使用类之外的属性腿。 class Rabbit{ constructor(lg = 4){ this.legs= lg } }
      • 如果我们不给实例化任何参数,它将使用默认值。如果它在你的类中有目的,你将在你的构造函数中使用它;否则你不需要使用它。
      • 如果我们不需要动态设置属性,我试图找到是否写属性(外部构造函数或内部)之间的区别的答案。只要我从另一个回复中看到,唯一的区别是关于 Babel,不是吗?
      • 区别很明显,如果不想覆盖它的默认值,不需要在构造函数中赋值。
      • 我明白,如果我不想覆盖属性的默认值,我可以通过两种方式来实现。我试图弄清楚这两种情况是否有任何区别(JavaScript 如何使用它)
      猜你喜欢
      • 2020-06-18
      • 1970-01-01
      • 2013-08-09
      • 2012-08-25
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 2022-12-09
      • 2016-04-25
      相关资源
      最近更新 更多