Typescript 中的类的应用

类的创建

class Person {
  // 属性
  name: string;
  age: number;
  // 构造函数
  constructor(name:string, age:number) {
    this.name = name;
    this.age = age;
  }
  // 方法
  print() {
    console.log('name: ' + this.name + ' age: ' + this.age);
  }
}

var p = new Person('Joh', 90);
p.print();

类的继承

class Human {
  name: string;
  age: number;
  tell() {
    return this.name + ' ' + this.age;
  }
}

// Student 继承自 Human
class Student extends Human {
  school: string;
  // 此处Student 也必须传递构造方法
  tell() {
    return this.name + ' ' + this.age + ' ' + this.school;
  }
}

var s = new Student();
s.name = 'Joh';
s.age = 90;
s.school = 'MIT';

console.log(s.tell());

使用super关键字继承属性

class Human {
  name: string;
  age: number;
  constructor(name: string, age:number) {
    this.name = name;
    this.age = age;
  }
  tell() {
    return this.name + ' ' + this.age;
  }
}

// Student 继承自 Human
class Student extends Human {
  school: string;
  // 此处Student 也必须传递构造方法
  constructor(school: string) {
    this.school = school;
    super('Joh', 90);
  }
  tell() {
    return this.name + ' ' + this.age + ' ' + this.school;
  }
}

var ss = new Student('MIT');

console.log(s.tell());

类的访问修饰符

在ts中有两种访问修饰符:

  • public : 共有的
  • private : 私有的
class People {
  // public 是默认的, 不加修饰符都是public
  public name:string;
  age:number;
  // private 无法访问和继承
  private color:string;

  getInfo() {
    return this.name + ':' + this.age;
  }
}

class Teacher extends People {
  school:string;
  getInfo() {
    return this.name + ':' + this.age + ':' + this.school;
  }
}

var t = new Teacher();
t.name = 'Joh';
t.age = '90';
t.school = 'MIT';
console.log(t.getInfo());

在constructor中也可添加修饰符

class People {
  // 如下所示
  constructor(public height: number){
  }
}
  • 在默认情况下,如果不添加访问修饰符,那么声明的属性或方法都是共有的,即:public

  • 上述 Teacher 继承自 People,继承了所有public的属性和方法

  • 如果将上述name添加private修饰符,那么编译就会报错,因为private声明的属性不会被继承

多种方式设置访问修饰符举例

class People {
    public height:number;
    private weight:number;
    size:number;

    constructor(private name:string, public age:number, color:string) {
        this.name = name;
        this.age = age;
        this.color = color;
    }

    print() {
        return this.name + " : " + this.age;
    }

    public say() {
        console.log('people say!');
    }

    private pee() {
        console.log('people pee!');
    }
}

以上是不同的几种设置访问修饰符的方式

  • 如果不写的话,那么就是public的
  • 访问修饰符可出现在constructor中

封装

通过 getter 和 setter 方法来设置

class Hello {
  name:string;
  // 私有的 _age属性
  private _age:number;
  // 普通方法
  tell() {
    return this.name;
  }
  // getter 和 setter 来访问和设置私有方法, 为外部提供一个接口来使用
  get name():string{
    return this._name;
  }

  set name(n:string){
    this._name = n;
  }
}

var h = new Hello():
h.name = 'Joh';
console.log(h.tell());

关键词 static

class Person {
  name:string;
  // 静态属性或方法 需要使用类名来调用
  static age:string;
  tell() {
    alert('Name: ' + this.name);
  }
  getInfo() {
    return 'Name: ' + this.name + ' ' + 'Age' + this.age;
  }
}

var p = new Person();
p.name = 'Joh';
Person.age = 90;
p.tell();
console.log(p.getInfo());

自定义类是一种引用数据类型

class Greeter {
  greeting:string;
  constructor(message: string) {
    this.greeting = message;
  }

  greet() {
    return 'Hello, ' + this.greeting;
  }
}

var gr:Greeter; // 此处声明gr为Greeter的类型
gr = new Greeter(); // 此处实例化赋值
console.log(gr.greet('Joh'));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值