我将通过一个教程,作者将在构造函数中创建类的属性。有理由这样做而不是在类本身中创建属性吗?
我的背景是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>
}
答案 0 :(得分:1)
在构造函数中创建属性时,例如:
constructor (public x: string) {
}
是同一件事:
public x: string;
constructor (x: string) {
this.x = x;
}
所以,您只是做相同的事情,但是写的少了一点。 希望对您有所帮助。
答案 1 :(得分:1)
使用访问修饰符(public
,private
,protected
)定义构造函数中的参数使您可以在类的实例化期间分配值。
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
标志,则必须将在myProp
中键入的MyMundaneClass
更改为string | undefined
。这是因为TS无法确定该值是否始终存在,因此需要您明确说明这种可能性。