前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Dart-类(上)

Dart-类(上)

原创
作者头像
杨不易呀
发布2023-12-27 00:54:58
1790
发布2023-12-27 00:54:58
举报
文章被收录于专栏:Flutter18杨不易呀

前言

  • 在 Dart 中,类(Class)是一种用于创建对象的模板
  • 它可以封装数据和方法
  • JavaScript 也有类的概念,虽然它在 ES6(ECMAScript 2015)之前是以不同的方式实现的

类的定义与使用

Dart 中的类

  • 在 Dart 中,你可以这样定义一个类:
代码语言:js
复制
class Person {
  String name;
  int age;

  Person(this.name, this.age);

  void introduce() {
    print("Hello, my name is $name and I am $age years old.");
  }
}

void main() {
  var person = Person("Alice", 30);
  person.introduce();
}

运行结果:

在上面简单的介绍了下如何在 Dart 中定义类,接下来我来为大家解读一下这段代码。

  • Person(this.name, this.age); 这是一个构造函数,是一种语法糖的写法
  • void introduce() { ... } 这是一个方法,它可以访问类中的属性
  • var person = Person("Alice", 30); 这是一个实例化对象的过程,我们可以通过 . 来访问对象的属性和方法

JavaScript 中的类

在 JavaScript (ES6 及以后) 中,类的定义方式如下:

代码语言:javascript
复制
class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }

  introduce() {
    console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
  }
}

const person = new Person("Alice", 30);
person.introduce();

主要差异

构造函数

  • Dart 使用类名作为构造函数(如 Person(this.name, this.age)),允许有多个命名构造函数
  • JavaScript 使用 constructor 关键字定义构造函数

属性访问

  • Dart 中,你可以直接定义属性和它们的类型(如 String name;)
  • JavaScript 中,属性通常在构造函数内通过 this 关键字定义

字符串插值

  • Dart 使用 $ 符号进行字符串插值(如 "$name"
  • JavaScript 使用 ${} 语法进行字符串插值

类型系统

  • Dart 是一种 强类型 语言,需要显式地定义变量和返回值的类型
  • JavaScript 是弱类型语言,类型是动态的

静态方法和静态属性

静态方法和静态属性是类级别的成员,这意味着它们不属于任何特定的实例,而是属于类本身 在 Dart 和 JavaScript 中都是可行的,尽管它们的实现方式略有不同

Dart 中的静态方法和属性

  • 在 Dart 中,你可以使用关键字 static 来定义静态方法和属性
  • 这些成员可以通过类名直接访问,而不需要创建类的实例
代码语言:js
复制
class Utility {
  static String appName = "MyApp";

  static void printAppName() {
    print("The app name is $appName.");
  }
}

void main() {
  print(Utility.appName); // 直接访问静态属性
  Utility.printAppName(); // 调用静态方法
}

运行结果:

JavaScript 中的静态方法和属性

  • 在 JavaScript 中,ES6 引入了静态方法的概念
  • 通过在方法名前添加 static 关键字,可以创建静态方法
  • 对于静态属性,直到最近(ES2020)才得到正式支持,但在此之前你可以在类外部定义静态属性
代码语言:javascript
复制
class Utility {
  static appName = "MyApp"; // ES2020 开始支持静态属性

  static printAppName() {
    console.log(`The app name is ${this.appName}.`);
  }
}

console.log(Utility.appName); // 直接访问静态属性
Utility.printAppName(); // 调用静态方法

主要差异

语法

  • 在 Dart 和 JavaScript (ES6 及以后) 中,静态方法的定义方式相同,都是在方法名前加上 static 关键字
  • 静态属性在 Dart 中也是使用 static 关键字,而在 JavaScript 中直到 ES2020 才正式支持这种语法

属性定义

  • Dart 允许在类内部直接定义静态属性
  • 在 JavaScript 的早期版本中,静态属性通常在类定义之外单独设置

类型系统

  • Dart 中静态成员可以拥有显式的类型
  • JavaScript 中类型是动态的,不需要显式声明

访问方式

  • 在 Dart 和 JavaScript 中,静态方法和属性都通过类名直接访问,而不是通过类的实例

构造函数

在上方的类定义中已经带着大家过了一遍类的定义了我这里就是想给大家单独说一下这个语法糖的构造函数。

我们上面是这样定义的:

代码语言:js
复制
Person(this.name, this.age);

其实这个语法糖的构造函数是这样的:

代码语言:js
复制
Person(String name, int age) {
  this.name = name;
  this.age = age;
}

End

  • 如果你有任何问题或建议,欢迎在下方留言,我会尽快回复
  • 如果你觉得本文对你有帮助,欢迎点赞、收藏,你的支持是我写作的最大动力

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 类的定义与使用
    • Dart 中的类
      • JavaScript 中的类
        • 主要差异
        • 静态方法和静态属性
          • Dart 中的静态方法和属性
            • JavaScript 中的静态方法和属性
              • 主要差异
              • 构造函数
              • End
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档