【问题标题】:creating properties in constructor在构造函数中创建属性
【发布时间】:2019-07-11 04:21:56
【问题描述】:

我将通过一个教程,作者在构造函数中创建了一个类的属性。是否有理由这样做而不是在类本身中创建属性?

我的背景是C#,所以我在构造函数中传递参数的原因是确保在实例化类时,传递构造函数中的参数。

这是作者写的代码:

export class Exercise {
    constructor(
        public name: string,
        public title: string,
        public description: string,
        public image: string,
        public nameSound?: string,
        public procedure?: string,
        public videos?: Array<string>
    ) {

    }
}

这是我创建类的方式:

export class Exercise {

    public name: string,
    public title: string,
    public description: string,
    public image: string,
    public nameSound?: string,
    public procedure?: string,
    public videos?: Array<string>

}

【问题讨论】:

    标签: angular typescript angular6


    【解决方案1】:

    在构造函数中创建属性时,例如:

    constructor (public x: string) {
    }
    

    与以下内容相同:

    public x: string;
    constructor (x: string) {
        this.x = x;
    }
    

    所以,你只是做同样的事情,但少写一点。

    【讨论】:

      【解决方案2】:

      使用访问修饰符(publicprivateprotected)在构造函数中定义参数允许您在类的实例化期间分配值。

      class MyConvenientClass {
        constructor(public myProp: string) {}
      }
      const myInstance = new MyConvenientClass('someValue')
      

      如果您只声明这些属性,则必须稍后再分配它们,这不太方便。

      class MyMundaneClass {
        public myProp: string
      }
      const myInstance = new MyMundaneClass()
      myInstance.myProp = 'someValue'
      

      还有一个不同之处。如果您在 TS 配置中设置了 strictPropertyInitialization 标志,那么您必须将输入 MyMundaneClassmyProp 更改为 string | undefined。这是因为 TS 无法确定该值是否会一直存在,因此需要您明确说明这种可能性。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-09-28
        • 1970-01-01
        • 2015-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多