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

es6 Class基本语法和继承

es6 Class基本语法

class的基本语法:
ES6 的class只是一个语法糖,它的绝大部分功能,ES5 都可以做到,新的class写法只是让对象原型的写法更加清晰、更像面向对象编程的语法而已

传统用构造函数生成实例

function Point(x, y) {this.x = x;this.y = y;
}
Point.prototype.toString = function () {return '(' + this.x + ', ' + this.y + ')';
}var p = new Point(1, 2);

es6 class写法
constructor()方法是类的默认方法,通过new命令生成对象实例时,自动调用该方法

class Point {constructor(x, y) {this.x = x;this.y = y;}toString() {return '(' + this.x + ', ' + this.y + ')';}
}

Class的继承

通过extends关键字实现继承,ES6 规定,子类必须在constructor()方法中调用super(),否则就会报错。这是因为子类自己的this对象,必须先通过父类的构造函数完成塑造,得到与父类同样的实例属性和方法,然后再对其进行加工,添加子类自己的实例属性和方法。如果不调用super()方法,子类就得不到自己的this对象
为什么子类的构造函数,一定要调用super()?原因就在于 ES6 的继承机制,与 ES5 完全不同。ES5 的继承机制,是先创造一个独立的子类的实例对象,然后再将父类的方法添加到这个对象上面,即“实例在前,继承在后”。ES6 的继承机制,则是先将父类的属性和方法,加到一个空的对象上面,然后再将该对象作为子类的实例,即“继承在前,实例在后”。这就是为什么 ES6 的继承必须先调用super()方法,因为这一步会生成一个继承父类的this对象,没有这一步就无法继承父类。

class Point { constructor(x, y) {this.x = x;this.y = y;}toString() {return '(' + this.x + ', ' + this.y + ')';}}class ColorPoint extends Point {constructor(x, y, color) {super(x, y); // 调用父类的constructor(x, y)this.color = color;}toString() {return this.color + ' ' + super.toString(); // 调用父类的toString()}
}

es5原型链实现继承

function SuperType() {this.property = true
}
SuperType.prototype.getSuperValue = function() {return this.property
}
function SubType() {this.subproperty = false
}
// 继承了SuperType
SubType.prototype = new SuperType()
SubType.prototype.getSubValue = function() {return this.subproperty
}const instance = new SubType()
alert(instance.getSuperValue()) // true

在这里插入图片描述

构造函数、原型和实例的关系
在这里插入图片描述

相关文章:

  • 天空卫士SASE 2.0:赋能您的数智安全
  • 建立一个简单的网页音乐盒模型效果#css#h5
  • 量化交易入门(二十九)布林带指标实现和回测
  • C语言最大公约数(辗转相除法)
  • elasticsearch _cat/indices docs.count is different than <index>/_count
  • 笔迹/签名数据集汇总
  • Linux部分命令
  • OSCP靶场--RubyDome
  • OC对象 - Block解决循环引用
  • AWTK 开源串口屏开发(15) - 通过 MODBUS 访问远程设备数据
  • 【微服务】认识Dubbo+基本环境搭建
  • 【QT学习】1.qt初识,创建qt工程,使用按钮,第一个交互按钮
  • Kafka开机自启脚本
  • 数据结构:单调栈和单调队列
  • 【pytest】测试数据存储在 Excel 或 TXT 文件中,如何参数化
  • 30天自制操作系统-2
  • android 一些 utils
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • echarts花样作死的坑
  • Git同步原始仓库到Fork仓库中
  • JavaScript标准库系列——Math对象和Date对象(二)
  • javascript数组去重/查找/插入/删除
  • MySQL的数据类型
  • Spring框架之我见(三)——IOC、AOP
  • Spring声明式事务管理之一:五大属性分析
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 闭包--闭包之tab栏切换(四)
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 浏览器缓存机制分析
  • 你真的知道 == 和 equals 的区别吗?
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • #NOIP 2014# day.1 T2 联合权值
  • #预处理和函数的对比以及条件编译
  • (3)nginx 配置(nginx.conf)
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (rabbitmq的高级特性)消息可靠性
  • (zt)最盛行的警世狂言(爆笑)
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (十三)Flask之特殊装饰器详解
  • (一)u-boot-nand.bin的下载
  • (一)基于IDEA的JAVA基础10
  • (转)可以带来幸福的一本书
  • . NET自动找可写目录
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .bat文件调用java类的main方法
  • .net 4.0发布后不能正常显示图片问题
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .NET 5种线程安全集合
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .net framework4与其client profile版本的区别
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇