JavaScript继承方式详解:原型链与原型继承
100 浏览量
更新于2024-09-01
收藏 142KB PDF 举报
"JavaScript 常见的继承方式汇总,包括原型链机制、原型继承等,旨在帮助理解和使用JavaScript中的继承概念。"
在JavaScript中,继承是实现代码复用和创建对象层次结构的关键机制。本篇文章主要介绍了两种常见的继承方式:原型链机制和原型继承。
1. 原型链机制
原型链是JavaScript实现继承的核心,它基于原型对象(prototype)和内部指针(__proto__)来连接不同对象。每个函数(Function)都是Object的实例,因此拥有一个__proto__属性指向Object.prototype。当查找对象的属性时,会沿着对象自身的属性、__proto__指向的原型对象,再到原型对象的__proto__,直至找到Object.prototype或找不到为止。这种逐级查找的过程形成了原型链。
例如,有构造函数Parent和Child,Parent有一个原型对象Parent.prototype,它包含一个指向Parent的constructor指针。创建Child实例时,如果试图访问不在Child实例上的属性,JavaScript会沿着原型链向上查找,直到找到该属性或者到达Object.prototype。
```javascript
function Parent() {
this.x = 199;
this.y = 299;
}
Parent.prototype.say = function() {
console.log('say');
}
function Child() {
this.g = 90;
}
Child.prototype = new Parent(); // 创建原型链
var p = new Parent();
var c = new Child();
console.dir(c);
```
2. 原型继承
原型继承是通过修改子类的prototype,使其指向父类的实例,从而实现继承。这种方式使得子类实例可以直接通过__proto__访问到父类的私有方法。例如:
```javascript
function Parent() {
this.x = 199;
this.y = 299;
}
Parent.prototype.say = function() {
console.log('say');
}
function Child() {
this.g = 90;
}
Child.prototype = new Parent(); // 子类的原型指向父类实例
Child.prototype.constructor = Child; // 修复子类的constructor
var c = new Child();
console.log(c.x); // 199
c.say(); // 'say'
```
在这个例子中,Child.prototype被重写,指向了Parent的一个新实例。因此,Child的所有实例都可以访问Parent的属性和方法。
理解并掌握这些继承方式对于深入学习JavaScript至关重要,它们可以帮助开发者创建复杂的对象结构,实现代码的复用和扩展。在实际开发中,还可以结合其他继承策略,如组合继承、寄生继承、原型式继承等,以适应不同的需求和场景。
2020-10-23 上传
2024-02-16 上传
2020-10-25 上传
2020-04-24 上传
2024-02-02 上传
2023-11-03 上传
153 浏览量
2021-09-30 上传
点击了解资源详情
weixin_38575118
- 粉丝: 3
- 资源: 923
最新资源
- sentry-ssdb-nodestore:Sentry的SSDB NodeStore后端
- 附近JavaScript:适用于JavaScript的ArcGIS API应用程序可查找附近的地点并路由到最近的位置
- aiap-field-guide:每周Aiap课程
- Ambit Components Collection-开源
- Glider Screen-crx插件
- PCB_FDTD.zip_matlab例程_C++_Builder_
- 快速收集视图的自定义蜂窝布局-Swift开发
- js-pwdgen-wannabe
- facebook-sdk:适用于Facebook Graph API的Python SDK
- markdown文档转pdf工具
- lucy:基于键值存储网络的聊天机器人
- Year Clock-crx插件
- goodmobileirisrecognition.rar_matlab例程_matlab_
- matlab人脸检测框脸代码-opencv4nodeJs-4.5.2:适用于Node.js的OpencvBuild
- CTI110:CTI110存储库
- L-one-crx插件