JavaScript继承方式详解:原型链与原型继承

0 下载量 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至关重要,它们可以帮助开发者创建复杂的对象结构,实现代码的复用和扩展。在实际开发中,还可以结合其他继承策略,如组合继承、寄生继承、原型式继承等,以适应不同的需求和场景。