在 JavaScript 中,实现继承的方法有多种

简介: 【6月更文挑战第15天】JavaScript 继承常见方法包括:1) 原型链继承,利用原型查找,实例共享原型属性;2) 借用构造函数,避免共享,但方法不在原型上复用;3) 组合继承,结合两者优点,常用但有额外开销;4) ES6 的 class,语法糖,仍基于原型链,提供直观的面向对象编程。

在 JavaScript 中,实现继承的方法有多种,以下是一些常见的实现方式:

  1. 原型链继承

这是 JavaScript 中最常用的继承方式,它基于原型链的查找机制实现。

javascript
function Parent() {
this.name = 'parent';
}

Parent.prototype.sayHello = function() {
console.log('Hello from Parent');
}

function Child() {
this.type = 'child';
}

// 关键步骤:将 Child 的原型指向 Parent 的实例
Child.prototype = new Parent();

var child = new Child();
console.log(child.name); // 'parent'
child.sayHello(); // 'Hello from Parent'
但是,原型链继承有一个问题,那就是所有的实例都会共享原型上的属性,这可能会在某些情况下引发问题。

  1. 借用构造函数(伪经典继承)

通过调用父类构造函数,增强子类实例,将父类的属性添加到子类实例上。

javascript
function Parent() {
this.name = 'parent';
}

function Child() {
// 关键步骤:调用 Parent 构造函数
Parent.call(this);
this.type = 'child';
}

var child = new Child();
console.log(child.name); // 'parent'
这种方式可以解决原型链继承的问题,但是方法都在构造函数中定义,每次创建实例都会生成一次方法,方法复用就无从谈起了。

  1. 组合继承

将原型链继承和借用构造函数的技术组合到一块,从而发挥二者之长的一种继承模式。

javascript
function Parent() {
this.name = 'parent';
}

Parent.prototype.sayHello = function() {
console.log('Hello from Parent');
}

function Child() {
// 借用构造函数
Parent.call(this);
this.type = 'child';
}

// 原型链继承
Child.prototype = new Parent();
Child.prototype.constructor = Child;

var child = new Child();
console.log(child.name); // 'parent'
child.sayHello(); // 'Hello from Parent'
这种方式既可以实现在子类构造函数中向父类构造函数传参,又可实现函数复用,因此是 JavaScript 中最常用的继承方式。

  1. ES6 的 class 继承

ES6 引入了 class(类),使得 JavaScript 的面向对象编程变得更加方便和直观。

javascript
class Parent {
constructor() {
this.name = 'parent';
}
sayHello() {
console.log('Hello from Parent');
}
}

class Child extends Parent {
constructor() {
super(); // 调用父类的 constructor
this.type = 'child';
}
}

let child = new Child();
console.log(child.name); // 'parent'
child.sayHello(); // 'Hello from Parent'
ES6 的 class 继承方式简洁明了,使得 JavaScript 的面向对象编程更加接近其他面向对象的语言。但是,请注意,ES6 的 class 实质上是基于原型链的语法糖,底层的实现仍然是原型链。

目录
相关文章
|
8天前
|
JavaScript 前端开发 索引
JavaScript中的数组的内置方法全面讲解
JavaScript 数组提供了多种内置方法来高效操作数据。如 `push()` 和 `unshift()` 分别在数组尾部和头部添加元素;`pop()` 和 `shift()` 则移除尾部和头部的元素;`splice()` 可增删元素;`slice()` 创建子数组;`join()` 将数组转化为字符串;`indexOf()` 和 `includes()` 用于查找元素;`forEach()` 遍历数组。此外,`reverse()` 和 `sort()` 改变数组顺序;`fill()` 填充数组值;`slice()` 和 `concat()` 则分别用于创建子数组和合并数组。
19 2
|
7天前
|
前端开发 JavaScript
JavaScript——promise 是解决异步问题的方法嘛
JavaScript——promise 是解决异步问题的方法嘛
15 0
|
7天前
|
JavaScript 前端开发 索引
js遍历的方法与区别
js遍历的方法与区别
19 3
|
4天前
|
JSON JavaScript 前端开发
JavaScript实现字符串转json对象的方法
JavaScript实现字符串转json对象的方法
|
3天前
|
JavaScript 测试技术 索引
js数组方法汇总
js数组方法汇总
6 1
|
4天前
|
JavaScript 前端开发 索引
JS - includes 方法和 map 方法使用方式
这篇文章介绍了JavaScript中数组的`includes`方法和`map`方法的用法,包括它们的语法、参数说明和具体的示例代码。`includes`方法用于判断数组是否包含特定元素,而`map`方法用于对数组中的每个元素执行操作并返回新数组。
9 1
|
8天前
|
JavaScript API 索引
js中的reduce()方法 讲解 和实现
`reduce()` 方法对数组元素依次应用一个回调函数,将结果累计并最终返回单一值。语法为 `reduce(callback(accumulator, currentValue, currentIndex, array), initialValue)`。参数包括累计器(初次为初始值或首元素)、当前元素值、索引及数组自身。此方法需返回值供下一轮迭代使用。常见应用场景包括计算数组总和与平均值、统计元素频率、过滤与转换数组内容及去除重复项等。例如,可通过 `reduce()` 快速计算 `[1, 2, 3, 4, 5]` 的总和或对对象属性值求和。此外,还可自定义实现 `reduce()` 方法
26 1
|
4天前
|
JavaScript 前端开发
javascript中常见获取时间戳的方法
javascript中常见获取时间戳的方法
11 0
|
4天前
|
JavaScript 前端开发
js中this是指向的哪个全局变量,改变this指向的方法有什么?
js中this是指向的哪个全局变量,改变this指向的方法有什么?
6 0
|
4天前
|
前端开发 JavaScript
JavaScript 获取 HTML 元素方法
JavaScript 获取 HTML 元素方法
8 0

热门文章

最新文章