博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ES5中的继承和ES6中的继承
阅读量:5314 次
发布时间:2019-06-14

本文共 1332 字,大约阅读时间需要 4 分钟。

在JavaScript中,prototype、constructor、__proto__、构造函数、原型、实例这些概念已经很让人头疼,再加上ES6的class 、extends已经乱成一锅粥了,平时对这些用的少写的少,是得好好捋清楚。看了几篇文章有了自己的理解,理解如下:
 
构造函数.prototype = 原型;
构造函数.prototype.constructor = 原型.constructor = 构造函数;
new 构造函数 = 实例;
实例.constructor = 构造函数;
实例.__proto__ = 原型;
 
这样看着不直观,那就直接上张图,更直观的捋清楚这些概念之间的关系:
 
下面用代码验证上面的关系:
 
function CreateGf(name, age){    this.name = name;    this.age = age;} CreateGf.prototype.sayWhat = function(name){    console.log(this.name + ' say: hi!');} var gf1 = new CreateGf('gf1',20);var gf2 = new CreateGf('gf2',22);gf1.sayWhat(gf1.name);gf2.sayWhat(gf2.name); console.log(CreateGf.prototype.constructor == CreateGf); //trueconsole.log(gf1.constructor == CreateGf);  //trueconsole.log(gf1.__proto__ == CreateGf.prototype); //true

 

 
那在ES6中是什么样的呢?看下图:
 
 
大体跟ES5中差不多,用代码验证下:
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);        this.color = color;    }     toString(){        return this.color + ':' + super.toString();    }} let colorPoint = new ColorPoint(); console.log(ColorPoint.prototype.__proto__ == Point.prototype); //trueconsole.log(ColorPoint.__proto__ == Point); //true

 

 
 
 

转载于:https://www.cnblogs.com/erduyang/p/5647599.html

你可能感兴趣的文章
SQL入门经典(八)之存储过程
查看>>
Chrome/FireFox处理JSON的插件
查看>>
【转】ACM之Java新手速成
查看>>
日志分析工具 Log Parser
查看>>
18 HTML标签以及属性全
查看>>
tensorflow 前向传播 2019.07.19
查看>>
安装完CentOS 7 Minimal之后,从头打造桌面工作环境
查看>>
利用GDAL实现影像的几何校正
查看>>
不错的iOS相关的主页或站点 (更新于14-06-22)
查看>>
less嵌套规则
查看>>
【转】深入浅出ShellExecute
查看>>
常见ES5方法
查看>>
缓存,队列(Redis,RabbitMQ)
查看>>
破解Java to C# Converter
查看>>
【codeforces 534B】Covered Path
查看>>
给图片添加标签
查看>>
1413确定进制
查看>>
linux 压缩文件的命令总结
查看>>
Mac上Homebrew的使用 (Homebrew 使 OS X 更完整)
查看>>
ProSolid下的遍历访问封装代码
查看>>