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 相关文章推荐
js中的this关键字详解
Sep 25 Javascript
js 实现的可折叠留言板(附源码下载)
Jul 01 Javascript
javascript制作游戏开发碰撞检测的封装代码
Mar 31 Javascript
浅析jQuery移动开发中内联按钮和分组按钮的编写
Dec 04 Javascript
ajax实现加载页面、删除、查看详细信息 bootstrap美化页面!
Mar 14 Javascript
JS数组搜索之折半搜索实现方法分析
Mar 27 Javascript
基于vue v-for 多层循环嵌套获取行数的方法
Sep 26 Javascript
如何解决.vue文件url引用文件的问题
Jan 18 Javascript
基于AngularJS拖拽插件ngDraggable.js实现拖拽排序功能
Apr 02 Javascript
JavaScript冒泡算法原理与实现方法深入理解
Jun 04 Javascript
关于element-ui表单中限制输入纯数字的解决方式
Sep 08 Javascript
vue界面发送表情的实现代码
Sep 11 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代码技巧的小结
2013/06/02 PHP
简单说说PHP优化那些事(经验分享)
2014/11/27 PHP
php算法实例分享
2015/07/14 PHP
ASP Json Parser修正版
2009/12/06 Javascript
EXTJS内使用ACTIVEX控件引起崩溃问题的解决方法
2010/03/31 Javascript
简单选项卡 js和jquery制作方法分享
2014/02/26 Javascript
动态读取JSON解析键值对的方法
2014/06/03 Javascript
jQuery+html5实现div弹出层并遮罩背景
2015/04/15 Javascript
jquery密码强度校验
2015/12/02 Javascript
JavaScript的字符串方法汇总
2016/07/31 Javascript
JQuery学习总结【二】
2016/12/01 Javascript
vue.js做一个简单的编辑菜谱功能
2018/05/08 Javascript
基于vue v-for 多层循环嵌套获取行数的方法
2018/09/26 Javascript
浅谈redux, koa, express 中间件实现对比解析
2019/05/23 Javascript
elementUI 动态生成几行几列的方法示例
2019/07/11 Javascript
vue 实现 rem 布局或vw 布局的方法
2019/11/13 Javascript
vue+elementUi 实现密码显示/隐藏+小图标变化功能
2020/01/18 Javascript
JavaScript 函数用法详解【函数定义、参数、绑定、作用域、闭包等】
2020/05/12 Javascript
[01:31:22]Ti4 循环赛第四日附加赛LGD vs Mouz
2014/07/13 DOTA
Python实现给文件添加内容及得到文件信息的方法
2015/05/28 Python
用Python将IP地址在整型和字符串之间轻松转换
2017/03/22 Python
给你一面国旗 教你用python画中国国旗
2019/09/24 Python
python多线程高级锁condition简单用法示例
2019/11/07 Python
Django 后台带有字典的列表数据与页面js交互实例
2020/04/03 Python
Python网页解析器使用实例详解
2020/05/30 Python
女大学生自我鉴定
2013/12/09 职场文书
运动会解说词200字
2014/02/06 职场文书
2014年小学植树节活动方案
2014/03/02 职场文书
中华魂放飞梦想演讲稿
2014/08/26 职场文书
学习张林森心得体会
2014/09/10 职场文书
2014第二批党员干部对照“四风”找差距检查材料思想汇报
2014/09/18 职场文书
高中校园广播稿3篇
2014/09/29 职场文书
二手房购房协议书范本
2014/10/05 职场文书
新郎婚礼答谢词
2015/01/04 职场文书
解决Python中的modf()函数取小数部分不准确问题
2021/05/28 Python
win11电脑关机鼠标灯还亮怎么解决? win11关机后鼠标灯还亮解决方法
2023/01/09 数码科技