当前位置: 首页 > news >正文

ts中 构造器

在 TypeScript(TS)中,构造器(constructor) 是用于创建和初始化类实例的特殊方法。它在类实例化时自动调用。

1. 基本语法

class Person {
  name: string;

  constructor(name: string) {
    this.name = name;
  }

  greet() {
    console.log(`Hello, my name is ${this.name}`);
  }
}

const p = new Person("Alice");
p.greet(); // 输出: Hello, my name is Alice
  • constructor 方法new Person("Alice") 时被调用。
  • this.name = name 赋值,将参数存入实例属性。

2. 构造器参数的访问修饰符

TypeScript 允许直接在构造器参数前加 publicprivateprotected,这样可以省略手动赋值

class Person {
  constructor(public name: string) {} // 自动创建并赋值 name 属性

  greet() {
    console.log(`Hello, my name is ${this.name}`);
  }
}

const p = new Person("Bob");
console.log(p.name); // Bob

修饰符说明:

  • public(默认)→ 外部可访问。
  • private → 仅类内部可访问。
  • protected → 仅类及其子类可访问。

示例:

class Example {
  constructor(private secret: string) {}

  showSecret() {
    console.log(this.secret); // ✅ 内部可访问
  }
}

const e = new Example("hidden");
// console.log(e.secret); ❌ 报错:属性“secret”为私有属性

3. 构造函数重载(伪重载)

TypeScript 不支持真正的构造函数重载,但可以通过 可选参数联合类型 模拟:

class User {
  name: string;
  age?: number;

  constructor(name: string);
  constructor(name: string, age: number);
  constructor(name: string, age?: number) {
    this.name = name;
    if (age !== undefined) {
      this.age = age;
    }
  }
}

const u1 = new User("Tom");        // 只传 name
const u2 = new User("Jerry", 25);  // 传 name 和 age

4. 构造器中的 readonly 属性

如果某个属性只在构造器中赋值,之后不可修改,可以用 readonly

class Car {
  constructor(public readonly brand: string) {}

  changeBrand(newBrand: string) {
    // this.brand = newBrand; ❌ 报错,brand 是 readonly
  }
}

const car = new Car("Tesla");
console.log(car.brand); // Tesla
// car.brand = "BMW"; ❌ 报错

5. 继承中的构造器

在子类中,构造器需要调用 super() 以执行父类的构造函数:

class Animal {
  constructor(public species: string) {}
}

class Dog extends Animal {
  constructor(species: string, public breed: string) {
    super(species); // 调用父类构造函数
  }
}

const d = new Dog("Canine", "Labrador");
console.log(d.species, d.breed); // Canine Labrador

6. 抽象类的构造器

抽象类不能被直接实例化,但可以在子类中使用 super() 继承其构造逻辑:

abstract class Shape {
  constructor(public color: string) {}
}

class Circle extends Shape {
  constructor(color: string, public radius: number) {
    super(color);
  }
}

const c = new Circle("red", 10);
console.log(c.color, c.radius); // red 10

总结

  • 构造器是 constructor 方法,用于初始化对象。
  • 可以省略 this.属性 = 参数,直接在参数前加修饰符(publicprivateprotectedreadonly
  • TypeScript 不支持真正的构造函数重载,但可以用可选参数或联合类型模拟
  • 子类必须调用 super() 以继承父类构造逻辑
  • readonly 属性只能在构造时赋值,之后不可更改

相关文章:

  • 23种设计模式-结构型模式-桥接器
  • 【CF】Day20——Codeforces Round 969 (Div. 2) C
  • STM32 CAN学习(一)
  • linux-- 0. C语言过、Java半静对、Python纯动和C++对+C
  • mapState 函数的用法
  • 7.5 分治:归并:LeetCode 剑指 Offer 51.数组中的逆序对
  • docker 搭建部署知识库XWIKI
  • 【嵌入式学习3】信息安全 - SSH协议
  • JAVA反序列化深入学习(六):CommonsCollections4
  • jQuery 入门到精通
  • Vue中使用antd-table组件时,树形表格展开配置不生效-defaultExpandedRowKeys-默认展开配置不生效
  • 经典算法 排列的字典序问题
  • 为什么需要 Node.js 的 URL 处理工具?
  • JavaScript 函数参数详解
  • 后端实现加解密工具类(记录)
  • MySQL增删改查(CRUD)操作详解与实战指南
  • Java EE(17)——网络原理——IP数据报结构IP协议解析(简述)
  • TabularDataset
  • 蓝桥杯备考----》完全背包模板
  • HarmonyOs学习 实验四:开发一个登录界面
  • 火星免费建网站/百度风云榜明星
  • 做专属淘客网站/微信小程序怎么做店铺
  • wordpress 软件站主题/java培训机构
  • 图盛网站建设/如何做到精准客户推广
  • 自己做电商网站./国家职业技能培训学校
  • 网站设计时图片怎么做/今日刚刚发生的国际新闻