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

ECMAScript6语法:类

在 ES6 中新增了类的概率,多个具有相同属性和方法的对象就可以抽象为类。类和对象的关系如下:

(1)类抽象了对象的公共部分,它泛指某一大类(class)。

(2)对象特指通过类实例化的一个具体的对象。

1、创建类和实例

JavaScript 在它的早期版本就支持类,直到 ES6 引入 class 关键字后才有了自己的语法。构建类可以使用 class 关键字,类体在一对大括号{}中,在大括号{}中可以定义类成员(如方法或构造函数)。

每一个类中包含了一个特殊的方法 constructor(),它是类的构造函数,其作用是对类进行初始化。通过 new 关键字生成对象实例后会自动调用构造函数。如果没有显示定义,在类的内部会自动创建一个 constructor() 构造函数。

在定义类的同时可以在类中添加方法。类中的所有方法不需要写 function 关键字,而且多个方法之间不需要添加分隔符号。

【实例】创建一个名为 Person 的类,在类中使用 constructor() 构造函数,并添加 show() 方法。

//定义类
class Person {//构造函数constructor(name, blogInfo, blogUrl) {this.name = name;this.blogInfo = blogInfo;this.blogUrl = blogUrl;}//方法show() {alert("姓名:" + this.name + "\n博客信息:" + this.blogInfo + "\n博客地址:" + this.blogUrl);}
}//使用 new 关键字来实例化对象
var p = new Person("KevinPan", "您好,欢迎访问 pan_junbiao的博客", "https://blog.csdn.net/pan_junbiao");//调用类中的方法
p.show();

执行结果:

2、类的继承

类的继承是指子类可以继承父类的一些属性和方法。要实现类的继承,就需要在创建类时使用 extends 关键字。

在定义的子类中需要使用 super() 方法,该方法用于引用父类的构造函数。

【实例】创建父类 Type 和子类 Brand,在子类的构造函数中使用 super() 方法,通过调用子类的 show() 方法输出商品信息。

//定义:父类
class Type {//父类构造函数constructor(name) {this.name = name;}//父类方法showType() {return "商品类型:" + this.name;}
}//定义:子类并使用 extends 关键字继承父类
class Brand extends Type {//子类构造函数constructor(name, bname) {//使用 super()方法,引用父类的构造函数super(name);this.bname = bname;}//子类方法show() {return this.showType() + "<br>商品品牌:" + this.bname;}
}//使用 new 关键字来实例化对象
var b = new Brand("手机", "OPPO");//调用子类中的方法
document.write(b.show());

执行结果:

3、静态成员

在创建类的类体中,在成员前面添加 static 关键字就可以定义静态成员。静态成员只能通过类名进行调用。

【实例】创建一个球类 Ball,在类中定义静态成员,通过类名调用静态成员输出球的信息。

//定义:类
class Ball {//静态成员static type = "篮球";static col = "黄色";//静态方法static show() {return "球的价格:60";}
}//通过类名调用:静态成员、静态方法
document.write("球的类型:" + Ball.type);
document.write("<br>球的颜色:" + Ball.col);
document.write("<br>" + Ball.show());

执行结果:

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 常见编码形式特征汇总(1)
  • 数据库根据日期统计SQL编写记录
  • c语言-经典例题
  • Redis 为什么这么快?
  • Ant Design Vue 快速上手指南 + 排坑
  • 单片机内存映射
  • wtv-next 宝塔更新教程
  • 计算数学精解【14】-Maxima计算精解【2】
  • VUE3请求意外报跨越错误或者500错误问题
  • 前端内容简单记录
  • Elasticsearch核心概念:
  • 【Linux —— 线程控制】
  • 电子合同如何在线签?9大协助工具软件
  • Python之字符串操作(连接符、重复符、比较、in)
  • 探索SQL的神秘力量:模糊匹配的艺术
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • Bootstrap JS插件Alert源码分析
  • CentOS7简单部署NFS
  • Computed property XXX was assigned to but it has no setter
  • Git同步原始仓库到Fork仓库中
  • IOS评论框不贴底(ios12新bug)
  • JavaScript类型识别
  • jQuery(一)
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • js如何打印object对象
  • learning koa2.x
  • PHP的Ev教程三(Periodic watcher)
  • Rancher如何对接Ceph-RBD块存储
  • Redash本地开发环境搭建
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • SpriteKit 技巧之添加背景图片
  • Xmanager 远程桌面 CentOS 7
  • 面试遇到的一些题
  • 前端自动化解决方案
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 网页视频流m3u8/ts视频下载
  • 微服务框架lagom
  • 微信支付JSAPI,实测!终极方案
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 怎么把视频里的音乐提取出来
  • ​Redis 实现计数器和限速器的
  • ​如何使用QGIS制作三维建筑
  • # Java NIO(一)FileChannel
  • (9)目标检测_SSD的原理
  • (STM32笔记)九、RCC时钟树与时钟 第二部分
  • (超详细)语音信号处理之特征提取
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (转载)Linux网络编程入门
  • *** 2003
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .NET MAUI Sqlite程序应用-数据库配置(一)
  • .net 连接达梦数据库开发环境部署