您现在的位置是:首页 > Javascript
当前栏目
深入学习 JavaScript——继承
2023-03-20 14:58:45 时间
继承
继承是面向对象语言中最重要的概念之一,许多 OO 语言都支持两种继承方式:接口继承和实现继承。接口继承只继承方法签名,而实现继承则继承实际的方法。由于 ECMAScript 中没有方法签名,所以不能实现接口继承,而是通过原型链的方式完成实现继承。
原型链
每个构造函数都有一个原型对象,原型对象包含一个指向构造函数的指针,而所有实例中都包含一个指向原型对象的内部指针。下面是一个实现原型链的基本方法:
function SuperType() {
this.property = true
}
SuperType.prototype.getSuperValue = function() {
return this.property
}
function SubType() {
this.subProperty = false
}
// 继承了 SuperType
SubType.prototype = new SuperType()
SubType.prototype.getSubValue = function() {
return this.subProperty
}
let instance = new SubType()
console.log(instance.getSuperValue()) // true
上述代码定义了 SuperType 和 SubType 两种类型,每个类型分别有一个属性和一个方法,SubType 通过改写原型对象的方式实现对 SuperType 的继承。原来存在于 SuperType 中的属性和方法,现在也存在于 SubType.prototype 中。在确立了继承关系后,我们给 SubType.prototype 又添加了一个新方法,这个例子中的关系图如下:
在上述代码中,我们修改 SubType 默认的原型为 SuperType 的实例,新原型不仅具有作为一个 SuperType 的实例所拥有的全部属性和方法,而且其内部还有一个指针,指向了 SuperType 的原型。最终的结果是这样的:instance 指向了 SubType 的原型,SubType 的原型又指向了 SuperType 的原型。
instance.__proto__ === SubType.prototype // true
SubType.prototype.__proto__ === SuperType.prototype //true
instance.__proto__.__proto__ === SuperType.prototype //true
相关文章
- TiDB Binlog 组件正式开源
- 使用Visual Studio Code对Node.js进行断点调试
- 推荐!数据可视化的十种优秀JavaScript图表库
- Node.js在复杂集成场景下占据统治地位的五个理由
- 玩转Node.js单元测试
- Node.js中内存泄漏分析
- Angular对React:一场关于Web开发者支持率的史诗对决
- 热点推荐:什么是后端开发?
- 谈谈Spring boot 启动层面的开发
- 使用NodeJS将文件或图像上传到服务器
- 编写React组件的最佳实践
- JavaScript MV*框架最值得关注的七个亮点
- 前端开发指南:如何利用PHP Cake框架构建应用
- 基于React与Vue后,移动开源项目Weex如何定义未来
- NodeJS和C++之间的类型转换
- jQuery中的常用到的三十九个技巧
- 官宣|Google Developers中国网站发布!
- NodeJS和C++之间的类型转换
- .NET Core首例Office开源跨平台组件(NPOI Core)
- 如何写出漂亮的React组件