鸿蒙中的类

Class 类

类是用于创建对象模板。同时类声明也会引入一个新类型,可定义其实例属性、方法 和 构造函数

类的基本语法

class 类名(){// 通常是首字母大小
	// 1,实例的属性
       //  2,构造函数
       //  3, 方法
}
// 实例化对象
const p:类名 = new 类名()

类的属性方法

// 声明一个类。一般类名大写
class Person{
  name:string = 'Tom' // 必须要有一个初始值。初始值有2中办法:1,直接像这样,在声明的时候就初始化。2.通过constructor来进行初始化
  // ? 表示这个属性可有可无
  likeArr?:string []
}
// 实例化对象
let p:Person = new Person()
console.log('姓名', p.name)
// ?. 是可选链操作符。与js一样
console.log('爱好', p.likeArr?.length) //爱好 undefined

通过构造函数 constructor 来进行初始化

// 声明一个类。一般类名大写
class Person{
  name:string
  age:number
  // 初始化有2种,1,直接通过constructor来进行初始化,2.直接在声明的时候就初始化
  constructor(name:string,age:number) {
    this.name = name
    this.age = age
  }
}
let p:Person = new Person('张三', 20)
console.log('姓名', p.name)

定义类中的方法


// 声明一个类。一般类名大写
class Person{
  name:string
  age:number
  // 初始化有2种,1,直接通过constructor来进行初始化,2.直接在声明的时候就初始化
  constructor(name:string,age:number) {
    this.name = name
    this.age = age
  }
  // 这个sayHi方法,需要传递一个参数,表明你是谁
  sayHi(yourName:string){
    console.log('hi', yourName, '我是'+ this.name) // 这里的this是当前这个实例
  }
}
let p:Person = new Person('张三', 20)
p.sayHi('李四')

Class 类中的静态属性和静态方法

Class 类中的静态属性和静态方法,通过static来修饰。被static修饰的属性和方法就是静态的。
访问静态属性和方法,需要通过类来进行访问。
如:类名.方法() ==> 调用静态方法
类名.属性 ====> 获取静态属性

声明静态属性,方法以及调用


// 声明一个类。一般类名大写
class Person{
  // 静态属性,因为被static修饰过
  static version:string = 'v1.0.0'
  name:string
  age:number
  // 初始化有2种,1,直接通过constructor来进行初始化,2.直接在声明的时候就初始化
  constructor(name:string,age:number) {
    this.name = name
    this.age = age
  }
  // 静态方法
  static getRandom():number{
    return Math.random() // [0,1)
  }
}

// 调用静态方法 
console.log('随机数', Person.getRandom())
// 方法静态属性
console.log('版本', Person.version)

继承 extends

类可以通过继承快速获取另外一个类的字段和方法
继承的基本语法如下:

class 父类{
//   字段
//   方法
//   构造函数
}

class  子类 extends 父类{
  
}

子类继承了方法


// 声明一个类。一般类名大写
class Person{
  name:string
  age:number
  constructor(name:string, age:number) {
    this.name = name
    this.age = age
  }
  sayHi(){
    console.log(`你好,我是${this.name}`)
  }
}

class  Son extends Person{

}

let s:Son = new Son("张三", 10)
s.sayHi()

子类重写了这个方法

// 声明一个类。一般类名大写
class Person{
  name:string
  age:number
  constructor(name:string, age:number) {
    this.name = name
    this.age = age
  }
  sayHi(){
    console.log(`你好,我是${this.name}`)
  }
}

class  Son extends Person{
  //子类重写父类中的方法
  sayHi(){
    console.log('子类是重写了这个方法哈')
  }
}

let s:Son = new Son("张三", 10)
s.sayHi()

子类通过 super 可以访问父类的实例字段、实例方法和构造函数

super 可以访问父类的构造函数


// 声明一个类。一般类名大写
class Person{
  name:string
  age:number
  constructor(name:string, age:number) {
    this.name = name
    this.age = age
  }
  sayHi(){
    console.log(`你好,我是${this.name}`)
  }
}

class  Son extends Person{
  grade:number
  // 这里其实是重写了父类的构造方法的哈
  constructor(name:string, age:number, grade:number) {
    // super必须在构造函数的最顶部(第一行)
    super(name, age) //调用父类的构造函数
    // 完成自己属性的初始化
    this.grade = grade
  }
  //子类重写父类中的方法
  sayHi(){
    console.log('子类是重写了这个方法哈')
  }
}

let s:Son = new Son("张三", 10, 89.5)
s.sayHi()
// 访问子类特有的属性
console.log('成绩是', s.grade)

instanceof 和 typeof

instanceof 运算符可以用来检测某个对象是否是某个类的实例
实例化子类并通过 instanceof 进行判断判断是否是某个类
判断数组是否为 Array 的实例
也就是说:引用数据类型使用 instanceof;语法: arr instanceof Array
基本数据类型使用:typeof; 语法:typeof 类型
console.log( typeof 11) 输出的是 number

posted @ 2025-06-26 11:38  南风晚来晚相识  阅读(25)  评论(0)    收藏  举报