当前位置: 首页 > 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{nameconstructor(name){this.name = name}logName(){console.log('你好,我的名字是',this.name)}
}const s = new Student('张三')
s.logName()

在这里插入图片描述

2. Es6-class 实现继承

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

class Person{nameconstructor(name) {this.name = name}logName(){console.log('你好,我的名字是',this.name)}
}class Student extends Person{ageconstructor(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的指向的运行结果
在这里插入图片描述


http://www.mrgr.cn/news/23613.html

相关文章:

  • 经纬恒润高压电池管理系统,助力新能源汽车飞速发展
  • 【设计模式】Template Method伪代码
  • 摩尔投票算法--169. 多数元素
  • 解锁精准电商营销新纪元:深度剖析京东商品详情API数据驱动的营销策略
  • 请问什么样的文献管理软件比较好用,用了zotero发现不会用?
  • 陶建辉演讲干货分享,AI 时代下的数据预测和数据处理挑战
  • Linux CentOS更换阿里云源解决Could not retrieve mirrorlist http://mirrorlist.centos.org
  • 笔试强训day07
  • 电信AEP平台WEB在线开发经验总结
  • 基于单片机一种风速测量仪的设计
  • 判断语句(C语言)
  • 01:电子移动速度/电阻大小与功率大小
  • (一)NoSQL之 【Redis配置】
  • 比较:#define,const,typedef
  • 为什么HashTable慢? 它的并发度是什么? 那么ConcurrentHashMap并发度是什么?
  • AI在医学领域:HMARL首个多器官诊断AI框架
  • 智能交通(三)——Elsevier特刊推荐
  • Redis中String类型的基本命令
  • 漏洞挖掘 | 某系统中少见的前端登录校验
  • Selenium与Qt应用:自动化与GUI结合实践