ES6学习——类语法:继承中的原型链
2016-01-11 08:00
621 查看
上篇文章中我们讲了些类的基本概念,其中提到ES6中的类语法是对原型继承的一种封装。JS的原型继承一共有两条原型链,显示和隐式,那么在类继承的语法中,这两条原型链又是怎么样的呢?
继续使用上篇文章中的例子:
下面先一步一步来检测显示原型链:
Point和ColorPoint都是function,存在显示原型prototype属性,其中Point上还存在静态属性TAG和静态方法getDesc:
显示原型就这两个,剩下的都是隐式原型了,继承的关系都靠这条原型链完成,我们先看所谓的类Point和ColorPoint隐式原型:
看清上面的关系了吗?这也是为什么我们在Point上定义静态TAG属性,却也可以用ColorPoint来访问。
弄清了类之间的继承关系,在来看实例之间的继承关系:
看清上面的关系了吗?比较混乱是不是,看下面的图立刻就清楚了:
看了这个图是不是脑子里有了更形象的印象了,要熟记这个原型链,对以后复杂的应用会有很大帮助。
我们看几个其它的例子:
*以上全部代码在Chrome 47下通过测试
继续使用上篇文章中的例子:
class Point{...} class ColorPoint extends Point{...} var p = new Point(...),cp = new ColorPoint(...);
下面先一步一步来检测显示原型链:
typeof Point// function console.log(Object.getOwnPropertyNames(Point))//["length", "name", "prototype", "getDesc", "TAG"] typeof ColorPoint //function console.log(Object.getOwnPropertyNames(ColorPoint))//["length","name","prototype"]
Point和ColorPoint都是function,存在显示原型prototype属性,其中Point上还存在静态属性TAG和静态方法getDesc:
console.log(typeof Point.prototype);//object console.log(Object.getOwnPropertyNames(Point.prototype));//["constructor","toString"] Point.prototype.constructor === Point//true console.log(typeof ColorPoint.prototype);//object console.log(Object.getOwnPropertyNames(ColorPoint.prototype));//["contructor","toString"] ColorPoint.prototype.constructor === ColorPoint
显示原型就这两个,剩下的都是隐式原型了,继承的关系都靠这条原型链完成,我们先看所谓的类Point和ColorPoint隐式原型:
Object.getPrototypeOf(Object.prototype) === null Object.getPrototypeOf(Function.prototype) === Object.prototype Object.getPrototypeOf(Point) === Function.prototype//true Object.getPrototypeOf(ColorPoint) === Point//true
看清上面的关系了吗?这也是为什么我们在Point上定义静态TAG属性,却也可以用ColorPoint来访问。
弄清了类之间的继承关系,在来看实例之间的继承关系:
Object.getPrototypeOf(cp) === ColorPoint.prototype//true Object.getPrototypeOf(ColorPoint.prototype) === Point.prototype//true Object.getPrototypeOf(Point.prototype) === Object.prototype//true Object.getPrototypeOf(Object.prototype) === null//true
Object.getPrototypeOf(p) === Point.prototype//true
看清上面的关系了吗?比较混乱是不是,看下面的图立刻就清楚了:
看了这个图是不是脑子里有了更形象的印象了,要熟记这个原型链,对以后复杂的应用会有很大帮助。
我们看几个其它的例子:
class C{} Object.getPrototypeOf(C) === Function.prototype//true Object.getPrototypeOf(C.prototype) === Object.prototype//true
class C extends Object { } Object.getPrototypeOf(C) === Object//true Object.getPrototypeOf(C.prototype) === Object.prototype//true
class C extends null { } Object.getPrototypeOf(C) === Function.prototype //true Object.getPrototypeOf(C.prototype) === null//true
*以上全部代码在Chrome 47下通过测试
相关文章推荐
- 杭电1218 Blurred Vision
- 禅说派-全图型PPT之图片处理技巧精粹
- VirtualBox 常用快捷键
- mysql -- 远程访问mysql的解决方案
- 高级并发编程学习-callable与Future的使用
- 感知器 Perceptron
- debian8开机等待时间
- 全文检索引擎Solr系列——整合中文分词组件mmseg4j
- 栈,堆,全局,文字常量,代码区总结
- 最小平方误差判别 MSE
- python学习之使用mysql
- ReferenceQueue的使用
- LINUS IPtables 封IP段
- Android系统之路(初识MTK) ------ System-Bluetooth name/WiFi AP name/sleep add never/Notification popup
- 全文检索引擎Solr系列——Solr核心概念、配置文件
- 归并排序
- 多层感知器 MLP
- 练手~~~
- 全文检索引擎Solr系列—–全文检索基本原理
- poj 1113 Wall (凸包)