也就是说,我试图从另一个构造函数调用,然后进一步构造.如果可以的话,我无法从文档中找出答案.
这是一个人为的例子,如果它有帮助:
class Chipmunk {
Chipmunk.named(this.name);
Chipmunk.famous() {
this.named('Chip'); // <-- What, if anything, goes here?
this.fame = 1000;
}
}
var chip = new Chimpmunk.famous();
Run Code Online (Sandbox Code Playgroud)
Den*_*low 27
有两种可能的方法:
class Chipmunk {
String name;
int fame;
Chipmunk.named(this.name, [this.fame]);
Chipmunk.famous1() : this.named('Chip', 1000);
factory Chipmunk.famous2() {
var result = new Chipmunk.named('Chip');
result.fame = 1000;
return result;
}
}
Run Code Online (Sandbox Code Playgroud)
Chipmunk.famous1()是一个重定向的构造函数.您无法在此属性中分配属性,因此您调用的构造函数必须允许您要设置的所有属性.这就是我添加fame为可选参数的原因.在这种情况下,你可以做name和fame最后.
Chipmunk.famous2()是工厂构造函数,可以只创建所需的实例.在这种情况下,fame不能是最终的(显然,如果你fame在named构造函数中使用了参数).
对于您的用例,第一个变体可能是最好的变体.
这是语言规范中的文档:
生成构造函数由构造函数名称,构造函数参数列表以及重定向子句或初始化列表和可选主体组成.
https://www.dartlang.org/docs/spec/latest/dart-language-specification.html#h.flm5xvbwhs6u