美文网首页
ES5的继承和ES6的继承有什么区别

ES5的继承和ES6的继承有什么区别

作者: 云高风轻 | 来源:发表于2023-06-30 09:09 被阅读0次

1. 前言

  1. 之前没有研究那么细,这次往里扒拉扒拉

2. ES5的继承时通过prototype或构造函数机制来实现。

  1. ES5的继承实质上是先创建子类的实例对象,
    然后再将父类的方法添加到this上(Parent.apply(this))

  • 它的主要特点包括:
  1. 原型链继承:使用 prototype 属性实现对象间的继承关系。子类的原型对象通过 Object.create() 方法创建,并将父类的实例作为子类原型对象的原型。
  1. 构造函数调用:子类通过调用父类的构造函数来继承父类的属性和方法,并使用 call() 或 apply() 方法设置正确的上下文。
  1. 原型属性和方法继承:子类通过原型链继承父类的原型属性和方法。
  1. 无法传递参数:无法在子类的构造函数中直接传递参数给父类构造函数。

3. ES6的继承机制完全不同

  1. 实质上是先创建父类的实例对象this(所以必须先调用父类的super()方法),
    然后再用子类的构造函数修改this

  • 它的主要特点包括:
  1. classextends:使用 class 关键字定义类,使用 extends 关键字实现类之间的继承关系。
  1. super关键字:子类使用 super 关键字来调用父类的构造函数,可以传递参数给父类构造函数。
  1. 原型方法的继承:子类会自动继承父类的原型方法,不需要手动设置原型链。
  1. 静态方法的继承:子类可以继承父类的静态方法。
  1. constructor方法:子类可以定义自己的 constructor 方法,并在其中调用 super 方法来执行父类的构造函数。
  1. class语法糖:ES6 的继承使用 class 和 extends 语法,使得代码更易读、易理解,更符合面向对象编程的语法习惯

4. 总结

  1. ES6 的继承相比于 ES5 的原型链继承更加直观、易用,
  2. 语法更清晰,支持传递参数给父类构造函数,
  3. 并且不需要手动设置原型链。
  4. 它提供了更接近传统面向对象编程的继承方式,并且更易于理解和维护

5. es5 继承 demo

// 父类
function Animal(name) {
  this.name = name;
}

Animal.prototype.sayHello = function() {
  console.log('Hello, I am ' + this.name);
};

// 子类
function Dog(name, breed) {
  Animal.call(this, name);
  this.breed = breed;
}

Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog;

Dog.prototype.bark = function() {
  console.log('Woof!');
};

// 使用示例
var dog = new Dog('Max', 'Labrador');
dog.sayHello(); // 输出: Hello, I am Max
dog.bark(); // 输出: Woof!


6. es6 继承 demo

// 父类
class Animal {
  constructor(name) {
    this.name = name;
  }

  sayHello() {
    console.log('Hello, I am ' + this.name);
  }
}

// 子类
class Dog extends Animal {
  constructor(name, breed) {
    super(name);
    this.breed = breed;
  }

  bark() {
    console.log('Woof!');
  }
}

// 使用示例
const dog = new Dog('Max', 'Labrador');
dog.sayHello(); // 输出: Hello, I am Max
dog.bark(); // 输出: Woof!



参考资料


初心

我所有的文章都只是基于入门,初步的了解;是自己的知识体系梳理,如有错误,道友们一起沟通交流;
如果能帮助到有缘人,非常的荣幸,一切为了部落的崛起;
共勉

相关文章

  • 前端常见面试题(八)@郝晨光

    ES5/ES6 的继承除了写法以外还有什么区别? ES5寄生组合式继承(只是列举一个方法,ES5继承还有很多实现方...

  • ES5 和 ES6 继承比较:

    ES5构造函数和继承: ES6构造函数和继承:

  • vue面试题(第十一天)

    1.ES5/ES6 的继承除了写法以外还有什么区别? ES5和ES6继承最大的区别就是在于:1.ES5先创建子类,...

  • JavaScript的多态和封装

    在之前的文章中我们已经介绍了JavaScript的继承包含了ES5和ES6的版本。 ES5继承 传送门 ES6继承...

  • 第十一天vue面试题

    1,ES5/ES6 的继承除了写法以外还有什么区别? ES5的继承实质上是先创建子类的实例对象,然后再将父类的方法...

  • 构造函数

    es5 es6 继承

  • ES5和ES6中继承的不同之处

    ES5和ES6中继承的不同之处 1、JS中视没有继承的,不过可以通过构造函数或是原型等实现继承,ES5实现继承的方...

  • 继承方式

    es6的继承: es6的继承写法简洁方便,十分直观。 es5的继承:(只推荐组合继承--最常用) 组合继承 除了S...

  • ES5和ES6 实现继承方式

    在ES5 中:通过原型链实现继承的,常见的继承方式是组合继承和寄生组合继承;在ES6中:通过Class来继承 组合...

  • 浅谈JavaScript原型、原型链的概念与继承的实现原理

    关于js对象的继承,es5和es6提供了两种不同的继承机制。es5通过修改原型链的方式实现继承,由此可见继承与原型...

网友评论

      本文标题:ES5的继承和ES6的继承有什么区别

      本文链接:https://www.haomeiwen.com/subject/ixxzydtx.html