ts类06
类
// 类:描述了创建的对象共用的属性和方法
// 实例化对象
class Person {
name: string
age: number
constructor(name, age) {
this.name = name
this.age = age
}
sayHi(str: string) {
console.log("ts" + str)
}
}
let cp = new Person("周三", 123)//new的时候,会执行类中的constructor(构造函数)
cp.sayHi("1111")
// 继承类 : 扩展现有的类,类与类的关系,子类继承父类
class Animal { //父类
name: string
age: number
constructor(name: string, age: number) {
this.name = name
this.age = age
}
sayHi(str: string) {
console.log("ts" + str)
}
}
class Dog extends Animal { //通过extends来继承父类的方法
constructor(name: string, age: number) {
//使用super方法可以调用父类的构造函数
super(name, age)
}
//可以调用父类方法,还可以重写父类方法
sayHi() {
console.log("dog类")
super.sayHi("父类的sayHi方法")
}
}
const A = new Animal("ccc", 3)
A.sayHi('+Animal类')
const B = new Dog("dog", 3)
B.sayHi()
类的存取器.
// 存取器:可以控制对对象成员的访问
class Name {
lastName: string
lastAge: string
constructor(lastName: string, lastAge: string) {
//使用super方法可以调用父类的构造函数
this.lastName = lastName
this.lastAge = lastAge
}
// 设置一个读取器,用来读取数据
get fullName() {
return this.lastName + ',今年' + this.lastAge + '岁'
}
// 设置一个设置器,用来设置数据
set fullName(value) {
console.log(value)
let ppp = value.split(',今年')
this.lastName = ppp[0]
this.lastAge = ppp[1]
}
}
const C = new Name('王五', '4')
console.log(C.fullName)
静态成员
静态属性
// 静态成员
// 静态属性
// 类自己的属性和方法
class Silence {
static sayHi() {
console.log('hi');
}
}
const s1 = new Silence('赵六');
console.log(Silence.sayHi());
类的修饰符
// 类的修饰符
// public 修饰的属性或方法是公有的,可以在任何地方被访问到,默认所有的属性和方法都是 public 的
class Bstatic {
private name1: string //访问修饰符,私有属性,不能在声明它的类的外部访问,与static静态方法不同,static不属于任何实例
protected age:string //访问修饰符,修饰的属性或方法是受保护的,区别在于可以在子类中访问
public constructor(name: string,age:string) { //写不写public都差不多,都是表示公有的方法属性
this.name1 = name
this.age = age
}
public p() { //写不写public都差不多,都是表示公有的方法属性
console.log(this.name1)
console.log(this.age)
}
}
class Cstatic extends Bstatic { //继承Bstatic
public What:string
constructor(name: string,age:string,What:string) {
super(name,age) //调用父类属性,可以继承到name和age,区别在与name只能继承不能访问,age可以在子类访问
this.What = What
}
play(){
return this.age+this.What
}
}
const Bs = new Bstatic("名字",'99')
console.log(Bs)
console.log(Bs.p)
const Cc = new Cstatic("名字","333","没啥")
console.log(Cc)
readonly
// readonly 只读属性关键字 只允许出现在属性声明或索引签名或构造函数中
class Rea {
// readonly age:number
constructor(readonly age: number, public name: string, private whay: string,protected mie:string) { //如果readonly以及上面三个修饰符写在参数上,则就是创建并初始化的age参数,上面的定义和下面的引用也不用写了
// this.age=age
}
up() {
// this.age = 15 //readonly为只读属性,无法进行修改
}
}
const R = new Rea(99,"张三","李四","王五")
console.log(R)
代码改变了我们,也改变了世界