类实际上就是对象的模型,我们可以通过类去创建这个对象

类就是定义了这个对象长什么样子

对象实际包含了俩个部分:

  • 一个是属性
  • 一个是方法

TS里面的类和JS里面的类其实是大同小异的

tsconfig.json

  1. {
  2. "compilerOptions": {
  3. "target": "ES6",
  4. "module": "ES6",
  5. "strict": true,
  6. "outDir": "./dist"
  7. },
  8. "include": ["./src/**/*"],
  9. "exclude": ["node_modules"],
  10. }

index.ts

  1. //使用class关键字来定义一个类
  2. class Person{
  3. }

实际上这个类就可以使用了

  1. //使用class关键字来定义一个类
  2. class Person{
  3. }
  4. const a = new Person()
  5. console.log(a)

定义类:

  1. class 类名{
  2. 属性名:类型
  3. }

实例属性

  1. //使用class关键字来定义一个类
  2. /*
  3. 对象中主要包含了俩个部分:
  4. 一部分:属性
  5. 一部分:方法
  6. */
  7. class Person{
  8. //定义实例属性
  9. name: string = '我';//对象中有一属性,属性名叫做name
  10. age: number = 18;//对象中有一属性,属性名叫做age
  11. }
  12. const a = new Person()
  13. console.log(a)
  14. console.log(a.name)

这就是我们定义的俩个属性
这种属性我们叫做实例属性
这个属性实际上是存放到person实例的,你只有new Person了以后才能看到这些属性,通过实例(a).属性名去访问到的属性

类属性

类属性怎么访问?

通过类直接访问
比如:

  1. Person.age

能这么访问,这种属性就是类属性(或者说是静态属性)

怎么去定义类属性?

在属性前使用static关键字定义类属性(静态属性)
这种属性不需要创建对象就可以直接用的属性

  1. class Person{
  2. //定义属性
  3. name: string = '我';//对象中有一属性,属性名叫做name
  4. age: number = 18;//对象中有一属性,属性名叫做age
  5. static sex:boolean = true;
  6. }
  7. const a = new Person()
  8. console.log(a)
  9. console.log(a.name)
  10. console.log(a.sex)

会报错,因为实例对象里面没有sex属性
既然是静态属性,我们要通过类去访问:

  1. class Person{
  2. //定义属性
  3. name: string = '我';//对象中有一属性,属性名叫做name
  4. age: number = 18;//对象中有一属性,属性名叫做age
  5. static sex:boolean = true
  6. }
  7. const a = new Person()
  8. console.log(a)
  9. console.log(a.name)
  10. console.log(Person.sex)

只读属性(readonly)

我们一般可以:

  1. class Person{
  2. //定义属性
  3. name: string = '我';//对象中有一属性,属性名叫做name
  4. age: number = 18;//对象中有一属性,属性名叫做age
  5. static sex:boolean = true
  6. }
  7. const a = new Person()
  8. console.log(a)
  9. console.log(a.name)
  10. a.name = "tom"
  11. console.log(a.name)

如果我们在属性前面加了readonly
这个属性就只能看不能改了

实例属性的readonly

  1. class Person{
  2. readonly name: string = '我';
  3. }

类属性(静态属性)使用readonly

  1. class Person{
  2. readonly sex:boolean = true
  3. }

没有特殊情况readonly一般用不上

定义方法

  1. class Person{
  2. //定义方法
  3. sayHello(){
  4. }
  5. }

里面就可以写你的方法
直接写的就表示这是实例方法或属性

  1. class Person{
  2. //定义方法
  3. sayHello(){
  4. console.log('hello ts');
  5. }
  6. }
  7. const a = new Person()
  8. a.sayHello();//调用方法

如果是静态方法

  1. class Person{
  2. //定义方法
  3. static sayHello(){
  4. console.log('hello ts');
  5. }
  6. }
  7. Person.sayHello();//调用方法