JavaScript 中的组合继承 :ES5 与 ES6 中最近似的写法
JavaScript 的继承写法较多,在此并不一一讨论,仅对最常用的组合式继承做一个说明:
组合式继承主要利用了原型链继承和构造函数继承。
一、ES5 中的写法
function Person(name, age){
this.name = name
this.age =age
}
Person.prototype.selfIntroduction = function(){
console.log(this.name, this.age)
}
function Student(name, age, grade){
Person.call(this,name,age) //重点
this.grade = grade
}
//Note1: 该处写法较多,个人喜欢用这种,用了ES6之后就不香了
Student.prototype.__proto__ = Person.prototype
var p1 = new Person('jerry',13)
p1.selfIntroduction()
var s1 = new Student('tom',12, 7)
s1.selfIntroduction()
执行结果:

二、ES6中的写法
class Person{
constructor(name,age) {
this.name = name
this.age = age
}
selfIntroduction(){
console.log(this.name, this.age)
}
}
class Student extends Person{
constructor(name, age, grade){
super(name,age)//相当于 Person.call(this,name,age)
this.grade = grade
}
}
var p1 = new Person('jerry',13)
p1.selfIntroduction()
var s1 = new Student('tom',12, 7)
s1.selfIntroduction()
执行结果:

三、比较
个人认为上述ES5中的写法是最接近ES6的,也最符合原型链的本意。
即:
p1.__proto__ == s1.__proto__.__proto__; // 结果: true
JavaScript 中的组合继承 :ES5 与 ES6 中最近似的写法的更多相关文章
- ES5和ES6中的继承
看到一篇写的非常好的关于js继承的文章,其中对构造函数.原型.实例之间的关系的描述十分透彻,故转载作者文章以随时学习,并供大家共同进步! ES5 ES5中的继承,看图: function Super( ...
- ES5和ES6中对于继承的实现方法
在ES5继承的实现非常有趣的,由于没有传统面向对象类的概念,Javascript利用原型链的特性来实现继承,这其中有很多的属性指向和需要注意的地方. 原型链的特点和实现已经在之前的一篇整理说过了,就是 ...
- ES5和ES6中的继承 图解
Javascript中的继承一直是个比较麻烦的问题,prototype.constructor.__proto__在构造函数,实例和原型之间有的 复杂的关系,不仔细捋下很难记得牢固.ES6中又新增了c ...
- ES5与ES6中的继承
ES5继承在ES5中没有类的概念,所以一般都是基于原型链继承,具体的继承方法有以下几种: 父类: function Father (name) { this.name = name || 'sam' ...
- 前端知识体系:JavaScript基础-原型和原型链-理解 es6 中class构造以及继承的底层实现原理
理解 es6 中class构造以及继承的底层实现原理 原文链接:https://blog.csdn.net/qq_34149805/article/details/86105123 1.ES6 cla ...
- 浅谈es5和es6中的继承
首先给大家介绍下在es5中构造函数的继承 function A(){ 2 //构造函数A 3 this.name="我是A函数"; 4 } 5 6 A.prototype={ 7 ...
- JS创建对象、继承原型、ES6中class继承
面向对象编程:java中对象的两个基本概念:1.类:类是对象的模板,比如说Leader 这个是泛称领导,并不特指谁.2:实例:实例是根据类创建的对象,根据类Leader可以创建出很多实例:liyi,y ...
- 在ES5实现ES6中的Object.is方法
ES6中对象的扩展里面添加了一个Object.is方法,用于比较两个值是否严格相等.内部计算与 === 行为基本一致.那么我们怎么在不支持这个方法的ES5中实现呢? 首先我们需要搞清楚两点,1:Obj ...
- ES5和ES6中关于import & export的书写方式的区别
ES6中输出变量的写法 情景1:单个变量 输出 export const less = 'less' 引用 import {less} from '../index.js' 情景2:多个变量 输出: ...
- ES3、ES5、ES6对象代理的写法差异
ES3的对象代理写法: console.log('定义私有变量ES3写法:') // ES3 var Person = function (){ var data = { name:'ES3', ag ...
随机推荐
- 狗的名字 ATCOER-ABC-171-C One Quadrillion and One Dalmatians
狗的名字 ATCOER-ABC-171-C One Quadrillion and One Dalmatians 题目链接 我们可以将名字看成26进制的数,就可以转化为将一个10进制转26进制的数的问 ...
- po文件如何转为excel
其实.po文件是一种翻译文件格式,类似于 key - value的列表 可以理解为两列,由于我们想把这个po数据读出来放入 excel.因为大部分人看不懂po文件的.虽然我们可以借助工具 poedit ...
- antlr的使用
我从以下几个问题入手介绍ANTLR的相关知识. 1 ANTLR是什么? ANTLR, ANother Tool for Language Recognition, 是一个可以接受含有语法描述的语言描述 ...
- An expression evaluator
An expression evaluator Download source code (17 kb) Two weeks ago, I saw an article on codeproject ...
- ContosoRetailDW数据库恢复问题
https://www.microsoft.com/en-us/download/details.aspx?id=18279 下载 ContosoBIdemoBAK.exe和ContosoBIdemo ...
- xlsx.js 表格的导出与导入
1.xlsx简介 通俗的说,xlsx这个插件可以把html中的table元素或者json数据转换成表格后进行导出 <script src="https://cdn.bootcdn.ne ...
- VLC 播放完毕后自动退出的问题
1.打开设置 2.打开全部显示 3.取消自动退出
- PM-企业数字化转型,数据治理是关键
企业数字化转型是大势所趋,通过数据治理.数据平台建设.数据分析与建模,把数据变成服务,使数据能在企业内顺畅流动起来,为企业带来巨大的价值.数据是企业数字化转型的重要基础. 数据能创造价值,但数 ...
- 【前端】【Vue】Vue3自适应瀑布流解决方案
Vue3自适应瀑布流解决方案 效果如上图所示. 说明:Vue3.[vue-masonry插件](vue-masonry - npm (npmjs.com)) 建议查看官方文档vue-masonry ( ...
- 问题解决:Failed to download metadata for repo ‘appstream‘: Cannot prepare internal mirrorlist
https://cloud.tencent.com/developer/article/1993317 大家都知道Centos8于2021年年底停止了服务,大家再在使用yum源安装时候,出现下面错误& ...