You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dart构造函数为何要用this关键字为类成员赋值?

为什么Dart构造函数去掉this.后输出空字符串?

这核心是Dart构造函数里this.的作用问题,直白说就是:

  • 加this.是直接把传入的参数值绑定到类的成员变量上;
  • 不加的话,参数只是构造函数内部的临时变量,根本没给类的成员赋值。

1. 带this.的构造函数为什么能正常输出

Hero(this.firstName, this.lastName);是Dart的语法糖,等价于手动给类成员赋值:

Hero(String firstName, String lastName) {
  this.firstName = firstName;
  this.lastName = lastName;
}

当你创建Hero("Luke", "Skywalker")时,传入的字符串会直接赋值给类的firstName和lastName成员变量,sayName()自然能拼接出正确的名字。

2. 去掉this.后为什么输出空字符串

当你写成Hero(firstName, lastName);时,这里的firstName和lastName是构造函数的局部参数,和类的成员变量重名,但Dart会优先使用局部变量——可你完全没把这些局部参数的值赋值给类的成员变量。

类的firstName和lastName还是你初始化时的默认值"",所以sayName()返回的是" "(两个空字符串加空格),看起来就是空输出。

3. 换成任意参数名为什么还是空

比如Hero(anyname, whatever);,这俩参数只是构造函数的临时变量,和类的firstName、lastName成员没有任何关联,你没做任何赋值操作,类成员依旧是空字符串,输出自然还是空。

正确的手动赋值写法(不用语法糖)

如果不想用this.的语法糖,得手动把参数值传给类成员,两种写法都可以:

方法一:在构造函数体内赋值

Hero(String firstName, String lastName) {
  this.firstName = firstName;
  this.lastName = lastName;
}

方法二:用初始化列表

Hero(String firstName, String lastName) 
  : firstName = firstName, 
    lastName = lastName;

内容的提问来源于stack exchange,提问作者Ksenia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 01:22:37