在 Dart 中使用“this”关键字是什么意思?

sun*_*eam 9 this dart flutter

如果这听起来像是一个极其愚蠢的问题,我很抱歉,但它确实一直困扰着我。

什么是“这个”。我看到了吗?每当我看到 flutter 中的文档时,我都会看到它被用于文档中的以下内容:

this.initialRoute,
this.onGenerateRoute,
this.onGenerateInitialRoutes,
this.onUnknownRoute,
this.navigatorObservers
Run Code Online (Sandbox Code Playgroud)

我将非常乐意阅读有关它的任何链接或文档。

Lui*_*uiz 11

“this”关键字引用当前实例。\n仅当存在名称冲突时才需要使用 this。否则,Dart 风格会忽略 this。

\n
class Car {\n  String engine;\n\n  void newEngine({String engine}) {\n    if (engine!= null) {\n      this.engine= engine;\n    }\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

因此,无论是在构造函数中还是在类中的某些函数中,您都可以与参数的名称保持一致。

\n
class Car {\n  String engine;\n\n  void updateEngine({String someWeirdName}) {\n    engine = someWeirdName;\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

如果您没有名称冲突,则不需要使用它。

\n

在其他语言 \xe2\x80\x8b\xe2\x80\x8b(如 Python 和 Swift)中,单词“self”将与“this”执行相同的操作。

\n


Ran*_*oon 5

基本上,this关键字用于表示当前实例。看看下面的例子。

void main() {
  
  Person mike = Person(21);
  
  print(mike.height);
  
}

class Person {
  
  double height;
  
  Person(double height) {
    height = height;

  }
}
Run Code Online (Sandbox Code Playgroud)

当我们运行这个省道代码时,它会输出null高度。因为我们height = height内部已经使用了Person构造函数,但是代码并不知道哪个height是类属性。

因此,我们可以使用this关键字来表示当前实例,这将有助于代码理解哪个实例height属于该类。因此,我们可以按如下方式使用它,我们将得到正确的输出。

void main() {
  
  Person mike = Person(21);
  
  print(mike.height);
  
}

class Person {
  
  double height;
  
  Person(double height) {
    this.height = height;

  }
}
Run Code Online (Sandbox Code Playgroud)