JavaScript之class继承_动力节点Java学院整理


Posted in Javascript onJuly 03, 2017

JavaScript的对象模型是基于原型实现的,特点是简单,缺点是理解起来比传统的类-实例模型要困难,最大的缺点是继承的实现需要编写大量代码,并且需要正确实现原型链。

有没有更简单的写法?有!

新的关键字class从ES6开始正式被引入到JavaScript中。class的目的就是让定义类更简单。

我们先回顾用函数实现Student的方法:

function Student(name) {
  this.name = name;
}

Student.prototype.hello = function () {
  alert('Hello, ' + this.name + '!');
}

如果用新的class关键字来编写Student,可以这样写:

class Student {
  constructor(name) {
    this.name = name;
  }

  hello() {
    alert('Hello, ' + this.name + '!');
  }
}

比较一下就可以发现,class的定义包含了构造函数constructor和定义在原型对象上的函数hello()(注意没有function关键字),这样就避免了Student.prototype.hello = function () {...}这样分散的代码。

最后,创建一个Student对象代码和前面章节完全一样:

var xiaoming = new Student('小明');
xiaoming.hello();

class继承

用class定义对象的另一个巨大的好处是继承更方便了。想一想我们从Student派生一个PrimaryStudent需要编写的代码量。现在,原型继承的中间对象,原型对象的构造函数等等都不需要考虑了,直接通过extends来实现:

class PrimaryStudent extends Student {
  constructor(name, grade) {
    super(name); // 记得用super调用父类的构造方法!
    this.grade = grade;
  }

  myGrade() {
    alert('I am at grade ' + this.grade);
  }
}

注意PrimaryStudent的定义也是class关键字实现的,而extends则表示原型链对象来自Student。子类的构造函数可能会与父类不太相同,例如,PrimaryStudent需要namegrade两个参数,并且需要通过super(name)来调用父类的构造函数,否则父类的name属性无法正常初始化。

PrimaryStudent已经自动获得了父类Studenthello方法,我们又在子类中定义了新的myGrade方法。

ES6引入的class和原有的JavaScript原型继承有什么区别呢?实际上它们没有任何区别,class的作用就是让JavaScript引擎去实现原来需要我们自己编写的原型链代码。简而言之,用class的好处就是极大地简化了原型链代码。

你一定会问,class这么好用,能不能现在就用上?

现在用还早了点,因为不是所有的主流浏览器都支持ES6的class。如果一定要现在就用上,就需要一个工具把class代码转换为传统的prototype代码,可以试试Babel这个工具。

练习

请利用class重新定义Cat,并让它从已有的Animal继承,然后新增一个方法say(),返回字符串 'Hello, xxx!'

Javascript 相关文章推荐
jQuery:节点(插入,复制,替换,删除)操作
Mar 04 Javascript
jquery计算鼠标和指定元素之间距离的方法
Jun 26 Javascript
解决jquery实现的radio重新选中的问题
Jul 03 Javascript
js实现简单计算器
Nov 22 Javascript
Javascript BOM学习小结(六)
Nov 26 Javascript
jQuery图片切换动画效果
Feb 28 Javascript
node.js利用mongoose获取mongodb数据的格式化问题详解
Oct 06 Javascript
JS实现统计字符串中字符出现个数及最大个数功能示例
Jun 04 Javascript
Angular5中状态管理的实现
Sep 03 Javascript
JS闭包原理与应用经典示例
Dec 20 Javascript
vue.js引入外部CSS样式和外部JS文件的方法
Jan 06 Javascript
《javascript设计模式》学习笔记一:Javascript面向对象程序设计对象成员的定义分析
Apr 07 Javascript
JavaScript之浏览器对象_动力节点Java学院整理
Jul 03 #Javascript
JavaScript之underscore_动力节点Java学院整理
Jul 03 #Javascript
React组件生命周期详解
Jul 03 #Javascript
利用Vue.js实现求职在线之职位查询功能
Jul 03 #Javascript
Swiper实现轮播图效果
Jul 03 #Javascript
jQuery实现点击关注和取消功能
Jul 03 #jQuery
Vue.js基础指令实例讲解(各种数据绑定、表单渲染大总结)
Jul 03 #Javascript
You might like
php中通过curl smtp发送邮件
2012/06/05 PHP
Laravel中注册Facades的步骤详解
2016/03/16 PHP
PHP函数checkdnsrr用法详解(Windows平台用法)
2016/03/21 PHP
详谈php静态方法及普通方法的区别
2016/10/04 PHP
php nginx 实时输出的简单实现方法
2018/01/21 PHP
php实现的表单验证类完整示例
2019/08/13 PHP
日期函数扩展类Ver0.1.1
2006/09/07 Javascript
json简单介绍
2008/06/10 Javascript
JQuery通过Ajax提交表单并返回结果
2011/07/31 Javascript
JS表的模拟方法
2015/02/05 Javascript
javascript实现表单提交后,提交按钮不可用的方法
2015/04/18 Javascript
JQuery实现动态操作表格
2017/01/11 Javascript
js的三种继承方式详解
2017/01/21 Javascript
微信小程序 实例开发总结
2017/04/26 Javascript
Vue2 配置 Axios api 接口调用文件的方法
2017/11/13 Javascript
Vue代码分割懒加载的实现方法
2017/11/23 Javascript
JavaScript基于面向对象实现的猜拳游戏
2018/01/03 Javascript
在JavaScript中使用严格模式(Strict Mode)
2019/06/13 Javascript
jQuery zTree树插件的使用教程
2019/08/16 jQuery
学习python的几条建议分享
2013/02/10 Python
python批量修改文件名的实现代码
2014/09/01 Python
python spyder中读取txt为图片的方法
2018/04/27 Python
Python基于Floyd算法求解最短路径距离问题实例详解
2018/05/16 Python
如何使用Flask-Migrate拓展数据库表结构
2019/07/24 Python
浅析Python语言自带的数据结构有哪些
2019/08/27 Python
Python selenium抓取虎牙短视频代码实例
2020/03/02 Python
Python如何实现远程方法调用
2020/08/07 Python
学点简单的Django之第一个Django程序的实现
2021/02/24 Python
俄罗斯汽车零件和配件在线商店:CarvilleShop
2019/11/29 全球购物
销售岗位职责范本
2014/06/12 职场文书
工作疏忽、懈怠的检讨书
2014/09/11 职场文书
给女朋友道歉的话大全
2015/01/20 职场文书
思想道德自我评价2015
2015/03/09 职场文书
旅游安全责任协议书
2016/03/22 职场文书
毕业生自我鉴定范文
2019/05/13 职场文书
Python制作表白爱心合集
2022/01/22 Python