当前位置: 首页 > news >正文

前端:JavaScript 实现类

文章目录

    • 1. Es6-类-class
    • 2. Es6-class 实现继承
    • 3. Es6-class 静态属性和私有属性
    • 4. Es5-寄生组合式继承

1. Es6-类-class

类是创建对象的模板,用代码封装数据以处理该数据,js中的类建立在原型上。

如何定义类,首先需要关键字 class,之后紧跟着类名,类名首字母需要大写,最后是需要写上大括号。
定义公有属性,直接在类下的大括号下添加对应的变量名即可,可以为变量名设置默认值。

// 类名首字母大写
class 类名{
	公有属性变量
	constructor(arg1){
		this.公有属性变量 = arg1
	}
	// 构造方法
	方法名(){
		// 一些代码逻辑
	}
}

// 调用该类
const abc = new 类名()

如下:

class Student{
   name
    constructor(name){
        this.name = name
    }
    logName(){
        console.log('你好,我的名字是',this.name)
    }
}

const s = new Student('张三')
s.logName()

在这里插入图片描述

2. Es6-class 实现继承

使用关键字 extends,表示当前类继承于某个父类。
使用关键字super,用于访问对象字面量或类的原型上的属性,或调用父类的构造方法。

class Person{
    name
    constructor(name) {
        this.name = name
    }
    logName(){
        console.log('你好,我的名字是',this.name)
    }
}

class Student extends Person{
    age
    constructor(name,age){
        super(name)
        this.age = age
    }
}

const s = new Student('张三',23)

如果子类中定义了与父类同名的方法,那么采用就近原则(重写),即子类调用该方法时调用的是子类下的该方法。

3. Es6-class 静态属性和私有属性

静态:类通过关键字static定义静态方法。不能在类的实例上调用静态方法,而应该通过类本身调用。
私有:类属性在默认情况下是公有的,但是可以使用增加哈希前缀 # 的方法定义私有类字段,声明和访问时也需要加上。定义私有的属性和方法无法在外部进行访问

class Person{
    static pName = '静态属性'
    static logPName(){
        console.log('静态方法')
    }

    #age = '私有属性'
    #logName(){
        console.log('私有方法')
    }

    logName2(){
        console.log(this.#age)
        this.#logName()
    }
}

console.log(Person.pName)
Person.logPName()

const p = new Person()
p.logName2()

4. Es5-寄生组合式继承

通过接用构造函数来继承属性,通过原型链的混合形式来继承方法。

function Person(name){
	this.name = name
}

Person.prototype.logName = function(){
    console.log('我的名字是',this.name)
}

function Stu(name){
    Person.call(this,name)
}
// 继承属性
const prototype = Object.create(Person.prototype,{
    constructor:{
        value:Stu
    }
    // 修改constructor的指向
})
// 继承方法
Stu.prototype = prototype
const s = new Stu('张三')

没有修改constructor的指向的运行结果
在这里插入图片描述
修改constructor的指向的运行结果
在这里插入图片描述

相关文章:

  • shader 案例学习笔记之smoothstep函数
  • csdn上传md,图片转存失败
  • git解决同时编辑一个文件的冲突
  • [建模已更新]2024数学建模国赛高教社杯A题:“板凳龙” 闹元宵 思路代码文章助攻手把手保姆级
  • MybatisX-Generator自动代码生成插件
  • 简单比较 http https http2,我们要如何把http升级为https
  • 旋转轴唇形密封圈的特点和优点
  • java重点学习-RabbitMQ+Kafka
  • 解决Mybatis mappe同时传递 List 和其他参数报错
  • 学期计划大二上
  • 利士策分享,克服生活中的困难:走好勇攀高峰的每一步
  • kitti数据点云velo坐标转像素坐标与点云深度值计算方法与教程(代码实现)
  • 【AIGC】探索超凡记忆:SuperMemory,你的私人智能书签助手!
  • MySQL——视图(三)应用实例——视图的应用
  • 声学气膜:专利守护与创新力量,不容侵权—轻空间
  • 华为OD机试真题 - 抢7游戏(Python/JS/C/C++ 2024 D卷 100分)
  • 间隙锁对数据库并发性能的影响
  • 扑捉一只耿鬼(HTML文件)
  • blender云渲染来了,blender云渲染教程!
  • Java面试题总结-基础和框架-面试题一
  • 中国科学院院士、我国航天液体火箭技术专家朱森元逝世
  • 甘肃发布外卖食品安全违法行为典型案例:一商家用鸭肉冒充牛肉被罚
  • 习近平会见哥伦比亚总统佩特罗
  • 中巴续签双边本币互换协议,进一步深化金融战略合作
  • 220名“特朗普币”持有者花1.48亿美元,获邀与特朗普共进晚餐
  • 香港根据《维护国家安全条例》订立附属法例