web前端之TypeScript的类class 中各类属性、方法,抽象类、多态

本文详细探讨了TypeScript中的类、继承、访问修饰符(public、private、protected)以及静态方法。通过与ES5和ES6的对比,解释了TypeScript如何实现继承和多态,包括组合式继承的概念。此外,还介绍了readonly修饰符用于创建只读属性。
摘要由CSDN通过智能技术生成

目录

 

一、TypeScript 中的类

二、TypeScript 中类的继承

三、TypeScript 中公共,私有与受保护的修饰符

四、TypeScript 中 静态方法

五、TypeScript 中 继承与多态


一、TypeScript 中的类

class Persons {
  name: any;
  age: number | undefined;
  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }
  getName(): void {
    console.log(`${this.name}今年已经${this.age}岁了`);
  }
}
 
let p11 = new Persons("za", 123);
console.log(p11.getName()); // za今年已经123岁了

转换成 ES5 的代码后:

var Persons = /** @class */ (function() {
  function Persons(name, age) {
    this.name = name;
    this.age = age;
  }
  Persons.prototype.getName = function() {
    console.log(
      this.name + "\u4ECA\u5E74\u5DF2\u7ECF" + this.age + "\u5C81\u4E86"
    );
  };
  return Persons;
})();
var p11 = new Persons("za", 123);
console.log(p11.getName()); //  za今年已经123岁了

2、这里和我们使用 Es6 中的 class 有一些差别

// javascript 中 class 的定义
class An {
  constructor(name) {
    this.name = name;
  }
  getName() {
    console.log(this.name);
  }
}
var a = new An("zz");
a.getName(); // zz

3、差异在于,我们需要去定义 constructor 构造函数中传入的数据参数的类型

二、TypeScript 中类的继承

class Animal {
  name: string | undefined;
  food: string;
  constructor(name: string, food: string) {
    this.name = name;
    this.food = food;
  }
  eat() {
    console.log(`${this.name}吃${this.food}`);
  }
}
 
class Cat extends Animal {
  constructor(name: string, food: string) {
    super(name, food);
  }
  jump() {
    console.log(`${this.name}正在跳`);
  }
}
 
let xiaohhua = new Cat("xiaohua", "猫粮");
console.log(xiaohhua.eat()); // xiaohua吃猫粮
console.log(xiaohhua.jump()); // xiaohua正在跳

这里和 ES6 中的 class 继承内容基本上没什么出入

三、TypeScript 中公共,私有与受保护的修饰符

这里的修饰符是对类中对 属性和方法的类型的定义

 

3-1、属性的 public

不定义的类心的话,默认就是 public 类型

class Animals {
  public name: string | undefined;
  constructor(name: string) {
    this.name = name;
  }
  eat() {
    console.log(`${this.name}哇`);
  }
}

转换成 es5 代码</

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
除了使用反射机制以外,TypeScript 还提供了其他一些方法来获取的所有属性方法。下面是两种常用的方法: 1. 使用 `Object.keys()` 函数来获取的所有属性名,然后再通过属性名获取对应的值。 ```typescript class MyClass { private privateProperty: string; public publicProperty: number; constructor() { this.privateProperty = 'private property'; this.publicProperty = 123; } private privateMethod() { console.log('private method'); } public publicMethod() { console.log('public method'); } } const myInstance = new MyClass(); // 获取的所有属性 const properties = Object.keys(myInstance); console.log(properties); // ["privateProperty", "publicProperty"] // 获取的所有方法 const methods = Object.keys(MyClass.prototype).filter((property) => typeof myInstance[property] === 'function'); console.log(methods); // ["privateMethod", "publicMethod"] ``` 2. 使用 `Reflect.ownKeys()` 函数来获取的所有属性方法名称。 ```typescript class MyClass { private privateProperty: string; public publicProperty: number; constructor() { this.privateProperty = 'private property'; this.publicProperty = 123; } private privateMethod() { console.log('private method'); } public publicMethod() { console.log('public method'); } } const myInstance = new MyClass(); // 获取的所有属性方法 const propertiesAndMethods = Reflect.ownKeys(myInstance); console.log(propertiesAndMethods); // ["privateProperty", "publicProperty", "privateMethod", "publicMethod"] ``` 这两种方法都可以获取的所有属性方法,你可以根据自己的需求选择其一种。需要注意的是,这些方法只能获取到实例属性方法,无法获取静态属性方法。如果你需要获取静态成员,你可以通过本身直接访问。例如,`MyClass.staticProperty` 和 `MyClass.staticMethod`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值