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 的语法糖,使得实现继承更加直观和易用。


相关文章
类特性(抽象类)
类特性(抽象类)
87 1
继承(6种方式)以及优缺点
继承(6种方式)以及优缺点
|
1月前
|
编译器 C++
【C++】面向对象编程的三大特性:深入解析继承机制(二)
【C++】面向对象编程的三大特性:深入解析继承机制
|
1月前
|
安全 程序员 编译器
【C++】面向对象编程的三大特性:深入解析继承机制(一)
【C++】面向对象编程的三大特性:深入解析继承机制
|
1月前
|
存储 编译器 C++
【C++】面向对象编程的三大特性:深入解析继承机制(三)
【C++】面向对象编程的三大特性:深入解析继承机制
|
6月前
|
算法 编译器 C语言
【C/C++ 编程题 01】用C++设计一个不能被继承的类
【C/C++ 编程题 01】用C++设计一个不能被继承的类
66 0
|
11月前
|
存储 C++ 容器
C++中的继承机制
C++中的继承机制
|
Java C++
面对对象三大特性:封装、继承、多态
面对对象三大特性:封装、继承、多态
|
C# 索引
C#中接口和类有什么异同
C#中接口和类有什么异同
接口和类有什么异同
接口和类有什么异同