JavaScript、ES6中的类的继承
class Father {
constructor(){}
money(){
console.log("10000块");
}
}
// 子类Son使用 extends 继承父类Father
class Son extends Father {}
var ss = new Father();
ss.money();
// 10000块
例2:
class Fa {
constructor(x, y){
this.x = x;
this.y = y;
}
sum(){
var su = this.x + this.y;
console.log(su);
}
}
class Son extends Fa{
constructor(x, y){ // constructor用于存放类的共有属性
this.x = x;
this.y = y;
}
}
var son = new Son(1, 2);
son.sum();
// 输出:Uncaught ReferenceError: Must call super constructor in derived
class before accessing 'this' or returning from derived constructor
原因:
实例对象son中的参数(1,2)其实是指向子类Son中的constructor(x,y) 并非 父类Fa中的constructor(x,y) 所以无法使用sum()方法。
改进:
class Fa {
constructor(x, y){
this.x = x;
this.y = y;
}
sum(){
var su = this.x + this.y;
console.log(su);
}
}
class Son extends Fa{
constructor(x, y){
super(x, y);// 调用了父类的构造函数constructor
}
}
var son = new Son(1, 2);
son.sum();
// 3
扩展:super关键字调用父类的普通函数
例1:
class Fa{
say(){
return '父类';
}
}
class Son extends Fa{
say(){
console.log('子类');
}
}
var son = new Son();
son.say()
// 子类
用super关键字调用父类的普通函数
class Fa{
say(){
return '父类';
}
}
class Son extends Fa{
say(){
console.log(super.say() + "的子类");
}
}
var son = new Son();
son.say()
// 父类的子类
class Fa {
constructor(x, y){
this.x = x;
this.y = y;
}
sum(){
var su = this.x + this.y;
console.log(su);
}
}
class Son extends Fa{
constructor(x, y){
// 利用super调用父类的构造函数
// super 必须在子类this之前调用
super(x, y);
this.x = x;
this.y = y; }
// 减法方法
subtract(){
console.log(this.x - this.y);
}
}
var son = new Son(5,3);
son.subtract();// 2
son.sum(); // 8
JavaScript、ES6中的类的继承的更多相关文章
- ES6中。类与继承的方法,以及与ES5中的方法的对比
// 在ES5中,通常使用构造函数方法去实现类与继承 // 创建父类 function Father(name, age){ this.name = name; this.age = age; } F ...
- ES6中的类和继承
class的写法及继承 JavaScript 语言中,生成实例对象的传统方法是通过构造函数.下面是一个例子 function Point(x, y) { this.x = x; this. ...
- 前端知识体系:JavaScript基础-原型和原型链-理解 es6 中class构造以及继承的底层实现原理
理解 es6 中class构造以及继承的底层实现原理 原文链接:https://blog.csdn.net/qq_34149805/article/details/86105123 1.ES6 cla ...
- ES6中的类继承和ES5中的继承模式详解
1.ES5中的继承模式 我们先看ES5中的继承. 既然要实现继承,首先我们得要有一个父类. Animal.prototype.eat = function(food) { console.log(th ...
- koa 基础(十八)es6中的类、静态方法、继承
1.app.js /** * es6中的类.静态方法.继承 */ // 定义Person类 class Person { constructor(name, age) { /*类的构造函数,实例化的时 ...
- Nodejs与ES6系列4:ES6中的类
ES6中的类 4.1.class基本语法 在之前的javascript语法中是不存在class这样的概念,如果要通过构造函数生成一个新对象代码 function Shape(width,height) ...
- ES6中的类
前面的话 大多数面向对象的编程语言都支持类和类继承的特性,而JS却不支持这些特性,只能通过其他方法定义并关联多个相似的对象,这种状态一直延续到了ES5.由于类似的库层出不穷,最终还是在ECMAScri ...
- 160803、如何在ES6中管理类的私有数据
如何在ES6中管理类的私有数据?本文为你介绍四种方法: 在类的构造函数作用域中处理私有数据成员 遵照命名约定(例如前置下划线)标记私有属性 将私有数据保存在WeakMap中 使用Symbol作为私有属 ...
- TypeScript完全解读(26课时)_8.ES6精讲-ES6中的类(进阶)
8.TypeScript完全解读-ES6精讲-类(进阶) 在index.ts内引入 Food创建的实例赋值给Vegetabled这个原型对象,这样使用Vegetables创建实例的时候,就能继承到Fo ...
随机推荐
- java如何实现多继承
在java中,原则上是不允许多继承的,也就是类与类之间只可以单继承.那么,有没有办法,可以在不使用接口的情况下实现多继承呢? 答案是可以.使用内部类就可以多继承,严格来说,还不是实现多继承,但是这种 ...
- 在CentOS7中配置网络时常见的LSB加载失败问题
前几天,为了给OpenNebula扩展新的主机节点,对CentOS7的网络进行了配置.本以为网络配置只需要简单修改ifcfg-eth0即可,但是在重启网络服务时却遇到了一个LSB加载失败的问题(Fai ...
- 9-10 November
cout 和 printf 在 C++ 中的实现:四舍六入五随缘.比如 printf("%.0lf\n", x=1.5) => 1. 标准做法:printf("%d ...
- [CSP-S模拟测试]:小P的生成树(数学+Kruskal)
题目描述 小$P$是个勤于思考的好孩子,自从学习了最大生成树后,他就一直在想:能否将边权范围从实数推广到复数呢?可是马上小$P$就发现了问题,复数之间的大小关系并没有定义.于是对于任意两个复数$z_1 ...
- 前端开发学习笔记 - 1. Node.JS安装笔记
Node.JS安装笔记 Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js uses an ...
- fedora18 Cannot retrieve metalink for repository: fedora. Please verify its path and try again 解决方法
Cannot retrieve metalink for repository: fedora. Please verify its path and try again 解决方法 执行如下命令: s ...
- Parse error: syntax error, unexpected 'class' (T_CLASS)
电脑坏了重新下载代码. 结果报错 Parse error: syntax error, unexpected 'class' (T_CLASS), expecting identifier (T_ST ...
- db2用户权限赋值
<!------------创建db2用户和组-------------------------------------------> [root@localhost ~]# userad ...
- mysqldump常用使用
1:导出数据库sakila的表结构mysqldump -uroot -ppwd -d sakila > /data/tmp/sakila.sql; 2:导出数据库sakila下表employee ...
- 002-localStorage和sessionStorage操作
一.概述 HTML5 提供了两种在客户端存储数据的新方法: localStorage - 没有时间限制的数据存储 一直存在除非用户手动清除缓存;是基于域的,任何该域下的所有页面都可访问localSto ...