Blog
首页
文档
收藏
关于
  • 在线转换时间戳 (opens new window)
  • 在线压缩图片 (opens new window)
  • Float-Double转二进制 (opens new window)
  • 文件转Hex字符串 (opens new window)

HiuZing

🍑
首页
文档
收藏
关于
  • 在线转换时间戳 (opens new window)
  • 在线压缩图片 (opens new window)
  • Float-Double转二进制 (opens new window)
  • 文件转Hex字符串 (opens new window)
  • 前端面试题

  • JavaScript

    • JavaScript语法

      • JavaScript-数据类型
      • JavaScript-ES6编程风格
      • JavaScript-异步编程
      • JavaScript-Promise
      • JavaScript-Proxy
      • JavaScript-Reflect
      • JavaScript-Iterator
      • JavaScript-Module
      • JavaScript-拷贝
      • JavaScript-this
      • JavaScript-垃圾回收机制
      • JavaScript-闭包
      • let和const
      • JavaScript-参数默认值
      • JavaScript-rest
      • JavaScript-扩展运算符
      • JavaScript-Symbol
      • JavaScript-生成器
      • JavaScript-class类
        • 类的静态成员
        • 类继承
          • ES5构造函数继承
        • 子类对父类的重写
        • get和set
        • 类中可以直接写赋值语句
        • 总结:
      • JavaScript-数值扩展
      • JavaScript-高阶函数
      • JavaScript-箭头函数
    • JavaScipt对象

    • JavaScript实例

    • JavaScript浏览器BOM

    • JavaScript DOM

  • Vue2

  • port

  • CSS

  • Node.js

  • JavaScript优化

  • uniapp

  • Mini Program

  • TypeScript

  • 面向对象编程

  • UI组件

  • Plugin

  • Vue3

  • 性能优化

  • Axios

  • 状态管理

  • React

  • Mock

  • Icon

  • Template

  • 构建工具

  • 项目规范配置

  • Taro

  • SVG

  • React Native

  • 前端
  • JavaScript
  • JavaScript语法
HiuZing
2023-04-06
目录

JavaScript-class类

ES6 提供了更接近传统语言的写法,引入了 Class(类)这个概念,作为对象的模板。

通过 class 关键字,可以定义类。基本上,ES6 的 class 可以看作只是个语法糖,它的绝大部分功

能,ES5 都可以做到,新的class写法只是让对象原型的写法

更加清晰、更像面向对象编程的语法。

  1. class声明类
  2. constructor 定义构造函数初始化
  3. extends继承父类
  4. super 调用父级构造方法
  5. static 定义静态方法和属性
  6. 父类方法可以重写
// 构造函数
function Phone(brand,price){
    this.brand = brand
    this.price = price
}
Phone.prototype.call = function(){
    console.log("我可u打电话!")
}
let Huawei = new Phone('华为',5999)
Huawei.call()

// class
class Phone{
    // 构造方法 名字不能修改
    constructor(brand,price){
        // 构造器的this——类的实例对象
        this.brand = brand
        this.price = price
    }
    // 方法必须使用该语法,不能使用ES5的对象完整形式
    // call方法——放在类的原型对象上,供实例使用
    // 通过Phone实例调用call时,call中的this就是Phone实例
    call(){
        console.log(`牌子是${this.brand},价格是${this.price}`)
    }
}

let onePlus = new Phone("1+",1999)
console.log(onePlus)
onePlus.call()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

# 类的静态成员

static 关键字属于类,而不属于实例对象

function Phone{
    
}
Phone.name = '手机'
Phone.change = function(){
    console.log("我可以改变世界")
}

let nokia = new Phone()
console.log(nokia.name) // undefined --> 称为静态成员


class Phone{
    // 静态属性
	static name = '手机'
	static change(){
    	console.log("我可以改变世界")
	}
}
let nokia = new Phone()
console.log(nokia.name) // undefined
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

# 类继承

# ES5构造函数继承

// 手机(父级)
function Phone(brand,price){
    this.brand = brand
    this.price = price
}
Phone.prototype.call = function(){
    console.log("我可u打电话!")
}

// 智能手机(子级)
function SmartPhone(brand,price,color,size){
    Phone.call(this,brand,price) // 调用父类的构造函数
    this.color = color
    this.size = size
}
// 设置子级构造函数的原型(我的实例对象原型有父级的方法)
SmartPhone.prototype = new Phone

// 声明子类的方法
SmartPhone.prototypr.photo = function(){
    console.log("我可以拍照!")
}
SmartPhone.prototypr.playGame = function(){
    console.log("我可以玩游戏!")
}

const chuizi = new SmartPhone('锤子',2499,'黑色','5.5inch')
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

ES6类继承

// 父类
class Phone{
    // 构造方法 名字不能修改
    constructor(brand,price){
        this.brand = brand
        this.price = price
    }
    // 方法必须使用该语法,不能使用ES5的对象完整形式
    call(){
        console.log("我可u打电话!")
    }
}

class SmartPhone extends Phone{
    // 构造方法
    constructor(brand,price,color,size){
        super(brand,price) // 调用父类的构造函数
            this.color = color
		    this.size = size
    }
    photo(){
        console.log("拍照")
    }
    playGame(){
        console.log("玩游戏")
    }
}

const xiaomi = new SmartPhone('小米',799,'黑色','4.7inch')
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

# 子类对父类的重写

在子类声明跟父类同名的方法

// 父类
class Phone{
    // 构造方法 名字不能修改
    constructor(brand,price){
        this.brand = brand
        this.price = price
    }
    // 方法必须使用该语法,不能使用ES5的对象完整形式
    call(){
        console.log("我可以打电话!")
    }
}

class SmartPhone extends Phone{
    // 构造方法
    constructor(brand,price,color,size){
        super(brand,price) // 调用父类的构造函数
            this.color = color
		    this.size = size
    }
    photo(){
        console.log("拍照")
    }
    playGame(){
        console.log("玩游戏")
    }
    call(){
        console.log("我可以视频电话!")
    }
}

const xiaomi = new SmartPhone('小米',799,'黑色','4.7inch')
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

# get和set

// get和set
class Phone{
    get price(){
        console.log('价格属性被读取了')
        return '¥900'
    }
    set peice(newVal){
        console.log('价格属性被修改了')
    }
}

// 实例化对象
let s = new Phone()
// console.log(s.price) // ¥900
s.price = 'free'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 类中可以直接写赋值语句

class Car{
    constructor(name,price){
        this.name = name
        this.price = price
    }
    // 给Car的实例对象添加一个属性,名为a,值为1
    a = 1
}

const c1 = new Car('奔驰',111)
1
2
3
4
5
6
7
8
9
10

# 总结:

  1. 类中的构造器不是必须要写的,要对实例进行一些初始化的操作,如添加指定属性时才写。
  2. 如果A类继承了B类,且A类中写了构造器,那么A类构造器中的super是必须要调用的。
  3. 类中所定义的方法,都放在了类的原型对象上,供实例去使用。
上次更新: 2024/08/14, 04:14:33
JavaScript-生成器
JavaScript-数值扩展

← JavaScript-生成器 JavaScript-数值扩展→

最近更新
01
React Native 使用SVG
08-13
02
Docker基础命令
08-04
03
算数逻辑单元
07-30
更多文章>
Theme by Vdoing | Copyright © 2021-2024 WeiXiaojing | 友情链接
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式