说明
ES6中,JavaScript 也有 class 类,与 java中的写法很类似
class关键字定义了类constructor方法是构造方法new通过new constructor()创建对象
this关键字代表实例对象extends关键字表示继承某个类super()调用父类构造方法
定义类
class 类名{
}
例子
class Phone{
}
class Student{
}
创建对象
通过定义好的类,创建对象:
const iphone13 = new Phone()
const huawei = new Phone()
const lilei = new Student()
const hanmeimei = new Student()
构造方法
作用:
- 创建对象时,自动调用构造方法
- 给实例属性初始值
constructor(形参1,形参1){
}
解释:
- 构造函数名是
constructor
定义属性
根据同一张图纸生成的手机,虽然一模一样,但有些部分是不同的,比如:手机序列号
用户买回后,又给手机进行自定义设置,如:手机名、wifi名 等
这些就是 属性
构造方法中定义属性(荐)
例子1
定义类:
class Phone{
// 构造函数有形参
constructor(name,sn){
this.name = name
this.sn = sn
}
}
创建对象时,是通过构造函数,要传参:
const nokia = new Phone("李雷的手机","123")
console.log(nokia.name)
console.log(nokia.sn)
const iphone = new Phone("韩梅梅的手机","456")
console.log(iphone.name)
console.log(iphone.sn)
例子2
定义类:
class Student{
constructor(name,age,sex){
this.name = name
this.age = age
this.sex = sex
}
}
使用该类创建对象:
const lilei = new Student("李雷",20,'男')
const hanmeimei = new Student("韩梅梅",19,'女')
console.log(lilei.name)
console.log(lilei.age)
console.log(lilei.sex)
console.log(hanmeimei.name)
console.log(hanmeimei.age)
console.log(hanmeimei.sex)
在类中定义属性(不推荐)
class 类名{
属性1 : 类型 = 值1
属性2 = 值2 // 类型可省略,根据初始值自动推论
}
例子1
在类中定义属性:
class Phone{
name = 'iphone13'
sn = '123'
}
通过实例对象访问属性:
const iphone = new Phone()
console.log(iphone.name)
console.log(iphone.sn)
例子2
在类中定义属性:
class Student{
age = 20
sex = '男' // 类型可省略,根据初始值自动推论 sex 是 string类型
}
通过实例对象访问属性:
const lilei = new Student()
console.log(lilei.age)
console.log(lilei.sex)
实例方法
函数的缺点
像下面这些函数,数量多了,就会混乱
// 函数 “吃”
function eat(){
}
// 函数 “打电话”
function call(){
}
解决
将函数放入到类中
实例方法的介绍
将函数放入到类中,就是 方法
作用:更好的封装,如:将 eat() 放入到 Student 类中,将 call() 放入到 Phone 类中,更加清晰
例子
class Phone{
// 打电话
call(number) {
console.log("打电话给:",number)
}
// 手机支持计算器的加法运算
add(a , b) {
return a + b
}
}
const nokia = new Phone()
nokia.call( "110" )
const res = nokia.add(1,2)
console.log(res)
例子
<script>
class Phone{
// 构造函数,创建对象时,就是调用构造函数
constructor(){
console.log("执行 constructor() ")
this.screen = 6.2
this.cpu = "A15"
this.ram = 4 // 内存
}
// 对象中的方法
call(num){
console.log("打电话给:",num)
}
}
// 创建对象,通过构造函数
const iphone = new Phone()
// 修改属性
iphone.cpu = "A20"
// 访问属性
console.log("屏幕:",iphone.screen)
console.log("cpu:",iphone.cpu)
console.log("ram:",iphone.ram)
// 调用对象方法
iphone.call(110)
</script>