Javacript如何实现继承?

简介: 在 JavaScript 中,可以使用原型链和构造函数来实现继承。下面分别介绍两种方式的实现方法

在 JavaScript 中,可以使用原型链和构造函数来实现继承。下面分别介绍两种方式的实现方法:


1. 使用原型链实现继承

javascriptCopy Codefunction Parent(name) {
  this.name = name;
}
Parent.prototype.getName = function() {
  return this.name;
};
function Child(name, age) {
  Parent.call(this, name); // 继承属性
  this.age = age;
}
Child.prototype = new Parent(); // 继承方法
Child.prototype.constructor = Child; // 修复构造函数指向
var child = new Child('Alice', 10);
console.log(child.getName()); // 输出 'Alice'

在这个例子中,通过将 Child 的原型设置为一个新的 Parent 实例来实现继承,这样 Child 就可以访问 Parent 的属性和方法。


2. 使用构造函数实现继承(经典继承)

javascriptCopy Codefunction Parent(name) {
  this.name = name;
}
Parent.prototype.getName = function() {
  return this.name;
};
function Child(name, age) {
  Parent.call(this, name); // 继承属性
  this.age = age;
}
var parent = new Parent('Bob');
var child = new Child('Alice', 10);
console.log(parent.getName()); // 输出 'Bob'
console.log(child.getName()); // 报错,因为 Child 没有继承 Parent 的原型方法

在这个例子中,通过在子类构造函数内部使用 Parent.call(this, name) 来继承父类的属性,但无法继承父类的原型方法。


在实现继承时,要正确处理原型链和构造函数的关系,以避免出现意外的行为。另外,ES6 中也引入了 class 和 extends 的语法糖,使得实现继承更加直观和易用。


相关文章
|
8月前
继承(6种方式)以及优缺点
继承(6种方式)以及优缺点
|
8月前
类特性(抽象类)
类特性(抽象类)
56 1
|
6天前
|
算法 编译器 C语言
【C/C++ 编程题 01】用C++设计一个不能被继承的类
【C/C++ 编程题 01】用C++设计一个不能被继承的类
27 0
|
10月前
|
设计模式
设计模式小例子理解封装、继承、多态
设计模式小例子理解封装、继承、多态
52 0
|
9月前
|
Java C++
面对对象三大特性:封装、继承、多态
面对对象三大特性:封装、继承、多态
|
10月前
|
C# 索引
C#中接口和类有什么异同
C#中接口和类有什么异同
|
10月前
|
索引
接口和类有什么异同
接口和类有什么异同
|
10月前
|
设计模式 程序员 编译器
【大话设计模式】封装 继承 多态
【大话设计模式】封装 继承 多态
|
存储 Java 数据库
Java面向对象之封装和继承
本篇文章记录博主对面向对象部分的学习,带大家认识Java基础知识——包与继承,后续内容将持续更新。
71 0
Java面向对象之封装和继承
|
Java
java面向对象三大特性,继承篇
1.继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
122 0
java面向对象三大特性,继承篇