class
相当于 es5 中升级版的构造函数
代码语言:javascript复制class 中无需用“ ,” 分割 , 添加会执行报错
class People {
name: string = "张三";
// 1、属性除了可以定义在constructor中,也可以定义在最顶部
age: number = 18; // 年龄
sex: boolean = true; // 为true 性别男
// 2、static 设置为(静态)私有属性,在class本身的属性,并不是实例对象中的属性
static address: string = "北京顺义";
// 3、constructor()方法是类的默认方法,
// 通过new命令生成对象实例时,自动调用该方法。
// 一个类必须有constructor()方法,如果没有显式定义, 一个空的constructor()方法会被默认添加。
// 属性是实例对象自身的属性,而不是定义在实例对象的原型上面。
constructor(sex, age) {
this.sex = sex;
this.age = age;
}
// 4、类的实例属性、方法默认定义在原型class上,使用this.可以定义在对象上
hi() {
return `你好呀 ${this.name}, 你今年 ${this.age} 岁啦,你是一个 ${
this.sex ? "男生" : "女生"
},住在 ${People.address}`;
}
}
// 5、继承 People ,创建一个新的calss 类
class Lisi extends People {
constructor(sex, name) {
super(true, name);
console.log(this.name);
}
// 在原先基础上,新增一个setName 方法来修改name名称
setName(name: string): string {
this.name = name;
console.log("super-sex", this.sex);
// 6、在 ES6 中,super 是一个关键字,用于在子类中调用父类的构造函数和方法。
return super.hi();
}
}
// 7、类必须使用new调用,否则会报错。
// 这是它跟普通构造函数的一个主要区别,后者不用new也可以执行。
const zhangSan = new People(false, 19);
const zhangHi = zhangSan.hi();
const liHi = new Lisi(false, 29).setName("李四");
console.log("zhangHI", zhangHi);
console.log("liHi", liHi);
// 8、存取器 使用 getter 和 setter 可以改变属性的赋值和读取行为:
// 和vue中的computed 计算属性异曲同工,用与计算转换等操作
// vue中的计算属性 有缓存、和数据依赖
class Animal {
constructor(name) {
this.name = name;
}
get name() {
return "Jack";
}
set name(value) {
console.log("setter: " value);
}
}
const a = new Animal("Kitty"); // setter: Kitty
a.name = "Tom"; // setter: Tom
console.log("存取器:", a.name); // Jack
# 【typescript 中新特性】
代码语言:javascript复制//1、 修饰符
// public 公共
// private 私有
// protected 保护,与private类似,区别在于protected可以在子类访问
class TypePeople {
public name: string; // 公共
private age: number = 19; // 外部不可访问
protected address: string = "北京顺义区"; // 仅在 子类可用
public constructor(name) {
this.name = name this.age;
}
}
class childrenPeople extends TypePeople {
constructor(name) {
super(name "