千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  千锋问问  > js实现继承的几种方式是什么

js实现继承的几种方式是什么

匿名提问者 2023-04-10 16:32:02

js实现继承的几种方式是什么

我要提问

推荐答案

  JavaScript中实现继承有以下几种方式:

  1.原型继承

  通过原型链实现继承,让子类的原型对象指向父类的实例对象,从而实现继承。

function Parent() {}
Parent.prototype.sayHello = function () {
console.log('Hello!');
};
function Child() {}
Child.prototype = new Parent();
const child = new Child();
child.sayHello();

   2.构造函数继承

  将子类的构造函数内部调用父类的构造函数,使用call或apply方法指定this指向。这样就可以实现从父类的实例对象继承属性和方法。

function Parent(name) {
this.name = name;
}
Parent.prototype.sayHello = function () {
console.log(`Hello, I'm ${this.name}!`);
};
function Child(name, age) {
Parent.call(this, name);
this.age = age;
}
const child = new Child('Alice', 6);
console.log(child.name); // Alice
console.log(child.age); // 6

  3.组合继承

  组合继承即将原型继承和构造函数继承结合起来使用。这种方式是目前比较常用的继承方式。

function Parent(name) {
this.name = name;
}
Parent.prototype.sayHello = function () {
console.log(`Hello, I'm ${this.name}!`);
};
function Child(name, age) {
Parent.call(this, name);
this.age = age;
}
Child.prototype = new Parent();
const child = new Child('Bob', 8);
console.log(child.name); // Bob
console.log(child.age); // 8
child.sayHello(); // Hello, I'm Bob!

   4.class继承

  使用ES6中的class关键字实现继承。使用extends关键字指定父类,使用super关键字调用父类构造函数和方法。

class Parent {
constructor(name) {
this.name = name;
}
sayHello() {
console.log(`Hello, I'm ${this.name}!`);
}
}
class Child extends Parent {
constructor(name, age) {
super(name);
this.age = age;
}
}
const child = new Child('Carol', 7);
console.log(child.name); // Carol
console.log(child.age); // 7
child.sayHello(); // Hello, I'm Carol!

 

其他答案

  •   第一种方式是原型链继承。原型链继承是JavaScript中最常见的继承方式之一,它通过将子类的原型指向父类的实例来实现继承。这样子类就可以访问父类的属性和方法,并在此基础上扩展自己的属性和方法。然而,原型链继承存在一些问题,如父类属性的引用类型值会被所有子类实例共享,容易造成意想不到的结果。第二种方式是借用构造函数继承。借用构造函数继承是指在子类构造函数中通过调用父类构造函数来实现继承。这样可以保证子类实例拥有自己的属性和方法,同时也可以继承父类的属性和方法。但是,借用构造函数继承存在一个明显的问题,即无法继承父类原型上的属性和方法。第三种方式是组合继承。组合继承是将原型链继承和借用构造函数继承结合起来的一种继承方式。在组合继承中,先通过借用构造函数继承父类的属性和方法,然后将子类的原型指向一个新的父类实例,以此实现继承父类原型上的属性和方法。虽然组合继承解决了原型链继承和借用构造函数继承的问题,但是它会导致父类构造函数被调用两次,降低了性能。第四种方式是原型式继承。原型式继承是基于已有的对象创建一个新对象,并将其原型指向已有对象的一个副本。这种方式可以用来创建简单的对象继承关系,但是它也存在和原型链继承一样的问题,即父对象上的引用类型值会被所有子对象共享。第五种方式是寄生式继承。寄生式继承是指创建一个用于封装继承过程的函数,并在其中对原有对象进行复制和扩展,以此实现继承。这种方式可以避免原型链继承和借用构造函数继承的问题,但是也存在一定的性能问题。

  •   JavaScript是一种面向对象的编程语言,因此实现继承是其中一个重要的特性。在JavaScript中,有多种方式可以实现继承。第一种方式是通过原型链实现继承。第二种方式是通过借用构造函数实现继承。第三种方式是组合继承。除此之外,还有原型式继承、寄生式继承和寄生组合式继承等方式,它们在不同的场景下具有不同的优势和劣势。总之,JavaScript中实现继承的方式有很多,开发者需要根据具体情况选择合适的方式来实现继承,从而实现代码的高效和优雅。