如何在自己的方法中设置类本身的值?试图利用this
。收到以下错误。
export class ProductForm extends FormGroup {
constructor(){
super({
productName: new FormControl()
})
}
addMoreFieldsTest(): void {
this = {
productName: new FormControl(),
productDescription: new FormControl()
}
}
错误:赋值表达式的左边必须是变量或属性访问。
我可以使用AddControl方法,但是为了学习的目的,我想设置类本身。
更新答案
FormControl的控件不直接驻留在FormGroup类中,而是驻留在一个名为controls
的类的属性中
因此,如果您只是希望在扩展类上添加控件,您只需要操作controls属性。
export class ExtendedFormGroup extends FormGroup {
constructor(
controls: { [k: string]: AbstractControl },
validatorOrOpts?: ValidatorFn | ValidatorFn[] | AbstractControlOptions,
asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[]
) {
super({...controls, alwaysPresent: new FormControl()},
validatorOrOpts,
asyncValidator
);
this.extendedProperties();
}
extendedProperties() {
this.controls["additional_control"] = new FormControl("");
}
}
上面的示例做了两件事
- 将构造函数参数传递给super,并在控件上添加一个附加的always present项。
- 直接操作
controls
属性,反映在你原来的问题。
简单地调用new ExtendedFormGroup({})
现在将创建一个FormGroup与两个预定义的控制器alwaysPresent
和additional_control
老反应由于JavaScript和TypeScript通过扩展实现的类本质上都是带有原型的标记块,所以你可以使用方括号符号来访问类的this
作用域上的属性。
class Parent {
foo: string;
constructor(foo: string) {
this.foo = foo;
}
}
class Child extends Parent {
constructor(foo: string) {
super(foo);
this.assignPropertiesDirectly();
}
assignPropertiesDirectly() {
this["bar"] = "Creates 'bar' on Child";
this["foo"] = "overwrites foo with this text";
}
}
然而,这种方法是脆弱的,因为它不仅完全违背了使用TypeScript的初衷,而且它还依赖于为属性名输入字符串值,这在最好的情况下会给维护带来麻烦,在最坏的情况下会容易出错。
听起来你的问题可能是作文设计的一个很好的候选。