微信公众号怎么创建优惠券,手机网站排名优化软件,深圳做棋牌网站建设哪家技术好,唐山哪里做网站序言#xff1a;
本文详细讲解了关于我们在程序设计中所用到的class类的各种参数及语法。
笔者也是跟着B站黑马的课程一步步学习#xff0c;学习的过程中添加部分自己的想法整理为笔记分享出来#xff0c;如有代码错误或笔误#xff0c;欢迎指正。
B站黑马的课程链接
本文详细讲解了关于我们在程序设计中所用到的class类的各种参数及语法。
笔者也是跟着B站黑马的课程一步步学习学习的过程中添加部分自己的想法整理为笔记分享出来如有代码错误或笔误欢迎指正。
B站黑马的课程链接鸿蒙课程介绍_哔哩哔哩_bilibili
往期笔记
【01】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-ArkTs基础语法与界面开发基础
【02】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-界面进阶与布局排布附QQ登陆、得物、京东登陆综合案例代码
【03】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-更多布局弹性/层叠方式与界面开发综合附飞狗卡片B站卡片案例实战开发支付宝界面代码
【04】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-ArkTs进阶运算符状态管理附综合案例美团购物车
【05】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-条件渲染if/switch判断与for/while循环附计数器、京东加购案例【06】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-综合案例·生肖抽奖卡具体实现类似支付宝集五福【07】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-Swiper轮播组件与样式结构重用
【08】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-Scroll容器与Tabs组件
目录
一.Class类
1.class类-属性方法
2.class类-构造函数
3.class类-定义方法静态方法静态属性
4.class类-继承extends和super关键字
5.class类-instanceof和typeof
6.class类-类的修饰符 一.Class类
1.class类-属性方法
1简介
类是用来 创建对象 模板。
同时类声明也会引入一个 新类型可定义其 实例属性、方法和构造函数。
2实例属性
①用法
class 类名{//1.实例属性字段//字段名、类型、初始值字段名1:类型xxx//可选字段可以不设置初始值字段名2?:类型//2.构造函数//3.方法
}
//使用类 实例化对象 基于类 创建对象
//可选字段在使用时需要配合使用 可选链操作符 避免出错
const p:类名 new 类名()
p.字段名1
p?.字段名2
②实例代码
class Cat{name:string Tomfoods?:string
}
//基于类创建对象
let c:Cat new Cat()
c.name 河马
console.log(姓名,c.name)
console.log(食物,c.foods?.length)
//这个问号的意义在于如果food真的有值则取其长度如果没有值就取food本身即为空
let z:Cat new Cat()
z.name 荷花
z.foods 河马
console.log(姓名,z.name)
console.log(食物,z.foods?.length) 2.class类-构造函数
1简介
不同实例将来需要有不同的字段初始值就需要通过构造函数实现。 2基本语法
class 类{字段A:类型字段B:类型constructor(参数...) {//通过new 实例化的时候 会调用constructor//通过关键字this 可以获取到实例对象this.字段A 参数}
}
const 实例化1 new 类(参数...)
const 实例化2 new 类(参数...) 3基础实例代码
class Food{name:stringprice:number
//希望有不同实例有不同的字段初始值-构造函数constructor(name:string,price:number) {this.namenamethis.priceprice}
}
const f1 new Food(西红柿鸡蛋,15)
const f2 new Food(土豆炖鸡块,24)
console.log(名称,f1.name,价格,f1.price)
console.log(名称,f2.name,价格,f2.price) 4进阶实例代码
加入了一个interface接口基于接口方便定义实例参数无需按照顺序进行输入
interface IFood{name:stringprice:numberdesc:string
}
class Food{name:stringprice:numberdesc:string//希望有不同实例有不同的字段初始值-构造函数constructor(paramsObj:IFood) {this.nameparamsObj.namethis.priceparamsObj.pricethis.desc paramsObj.desc}
}
let p1:Food new Food({name:西兰花,desc:好吃,price:188
})
let p2:Food new Food({name:黄瓜炒鸡蛋,desc:清爽,price:3688
})
console.log(菜名,p1.name,价格,p1.price,描述:,p1.desc)
console.log(菜名,p2.name,价格,p2.price,描述:,p2.desc) 3.class类-定义方法静态方法静态属性
1简介
类中可以定义方法并且在内部编写逻辑。
class 类名{方法名(参数...):返回值类型{//逻辑//可以通过this获取实例对象
}
} 2实例代码
class Person{name:stringconstructor(name:string) {this.name name}
//定义方法sayHi(name:string){console.log(你好${name},我是${this.name})}
}
const p:Person new Person(笨猪河马)
//方法调用
p.sayHi(可爱的荷花) 3静态属性和静态方法
①简介
静态属性和静态方法不是给我们实例化对象添加的是给类添加的比如定义一个数字工具类中会有π3.14e2.71
①语法
class 类{static 字段:类型static 方法(){}
}
//使用
类.字段
类.方法()
②实例代码
class Robot{//如果不设置值默认是undefinedstatic PI:number 3.14static version:string v10.12//工具方法static getRandomNumber(){return Math.random()}
}
//无需实例化对象直接调用类 没有new 也可以直接用
console.log(机器人版本,Robot.version)
console.log(生成一个随机数:,Robot.getRandomNumber())
console.log(计算半径为5的圆的面积:,Robot.PI*5*5) 4.class类-继承extends和super关键字
1简介
我们在实际使用中各个类之间往往会有很多相似之处比如说猫和狗都是动物我们就可以定义一个动物类作为猫类和狗类的父类。比如程序员和教师都有姓名、年龄、家庭住址、email只不过能做的职业功能不同我们就可以添加一个人类含有姓名、年龄、家庭住址、email四个属性作为他们的父类。
即把公共部分抽取出来进行复用我们的代码就会更加简洁高效。
class 父类{//字段//方法//构造函数
}class 子类 extends 父类{//自己的字段属性//自己的方法//可以重写父类的方法
} 2实例代码
class Person{name:stringage:numberconstructor(name:string,age:number) {this.namenamethis.ageage}sayHi(){console.log(大家好,我叫,this.name,今年,this.age,岁)}
}class Student extends Person{grade:stringconstructor(name:string,age:number,grade:string) {//父类中的构造函数需要我们手动调用子类可以访问父类的实例字段、实例方法和构造函数//此时需要手动调用super()构造函数super.方法名() super.属性名super(name,age)//完成自己属性的初始化this.gradegrade}//子类中想要重写父类的方法只需要提供同名的方法即可//比如学生想展示一下自己的英文水平sayHi(): void {console.log(Hello,My name is,this.name,Now year,this.age,,我的年级是,this.grade)}study(){console.log(我是学生我爱学点小习)}}
let s1:Student new Student(河马,74,大四)
s1.sayHi()
console.log(今年,s1.grade)
s1.study()class Teacher extends Person{}
let t1:Teachernew Teacher(大卑老师,9999)
t1.sayHi()
class Worker extends Person{}
let w1:Workernew Worker(修水管的师傅,41)
w1.sayHi() tips关于super()子类可以通过super访问父类的实例字段、实例方法和构造函数。 5.class类-instanceof和typeof
1简介
instanceof运算符可以用来检测某个对象是否是某个类的实例 typeof只能用于判断简单类型如Boolean、string、number等简单类型 2typeof实例代码
console.log(typeof 111)
console.log(typeof true)
console.log(typeof abc)
class Person{}
class Student extends Person{}
let p:Person new Person()
let s:Student new Student()
console.log(typeof p)
console.log(typeof s) 我们在日志中会发现typeof判断简单类型都可以直接显示其类型但用typeof去判断p和s会显示object 3instanceof实例代码
①需求
定义一个父类→定义子类并继承父类→实例化子类并通过instanceof进行判断→判断数组是否为Array的实例
②代码
class Person{}
class Student extends Person{}
class Worker{}
let s:Student new Student()
console.log(s和Student类的instanceof判断结果,s instanceof Student)
console.log(s和Person类的instanceof判断结果,s instanceof Person)
console.log(s和Worker类的instanceof判断结果,s instanceof Worker) ③判断数组代码
interface IObj{}
//判断一个变量是否存的是数组
let temp[]
let temp2:IObj{}
//普通对象可以用数组判断
console.log(temp1是否是数组,temp instanceof Array)
//如果是调temp2这种接口里的方法就不能用数组去判断
console.log(temp2是否是数组,temp2 instanceof Array) 6.class类-类的修饰符
1简介
类的属性和方法可以通过修饰符来限制访问
修饰符包括readonly、private、protected和public
省略不写默认为public 2readonly实例代码
class Cat{name:stringage:numberreadonly legs:number4constructor(name:string,age:number) {this.namenamethis.ageage}
}
let c1new Cat(小花,2)
c1.name小美
c1.legs6 //会报错
console.log(姓名,c1.name) 3private实例代码
class Person{private name:stringprivate age:number0
}
class Student extends Person{sayHi(){console.log(访问私有的数据,super.name)
//私有数据无法在外部子类中访问}
} 4protected修饰符
①简介
protected修饰符的作用与private修饰符非常相似
不同点是protect修饰的成员允许在派生类子类中访问
②代码演示
class Person{protected name:stringprivate age:number0
}
class Student extends Person{sayHi(){console.log(访问私有的数据,super.name)}
} 用protected定义父类的name一样的代码就可以访问了。
但是在外部访问一样不允许访问。
class Person{protected name:stringprivate age:number0constructor(name:string,age:number) {this.namenamethis.ageage}
}
class Student extends Person{sayHi(){console.log(访问私有的数据,super.name)}
}
let s1:Student new Student(小华,18)
//外部
console.log(外部访问保护的数据,s1.name) 感谢阅读。