JS继承

JavaScript中的继承是一种面向对象编程的核心概念,它允许一个对象(称为子类)从另一个对象(称为父类)中继承属性和方法。这种继承机制可以通过原型链或类来实现。

下面是两种在JavaScript中实现继承的常用方式:

  1. 原型链继承:
    JavaScript中的对象都有一个原型(prototype)属性,可以通过原型链实现继承。原型链继承的基本思想是将子类的原型对象设置为父类的实例。这样子类就可以继承父类的属性和方法。

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

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

function Child() {
  this.name = 'Child';
}

// 将Child的原型对象设置为Parent的实例
Child.prototype = new Parent();

var child = new Child();
child.sayHello(); // 输出 "Hello, I am Child"

        原型链继承的缺点是对父类的实例属性和方法进行继承时,如果子类修改了继承的属性,会影响到所有子类的实例,因为它们共享同一个原型对象。

2. 借用构造函数继承:
        借用构造函数继承通过在子类的构造函数中调用父类的构造函数,来实现对父类实例属性的继承。这种方式可以避免属性共享的问题,但无法继承父类原型链上的方法。

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

function Child() {
  Parent.call(this); // 在子类构造函数中调用父类构造函数
  this.age = 10;
}

var child = new Child();
console.log(child.name); // 输出 "Parent"

         借用构造函数继承的缺点是无法继承父类原型链上的方法。

        为了克服上述两种方式的缺点,ES6引入了class语法,提供了更直观和方便的继承机制。使用class关键字和extends关键字可以轻松实现继承,同时支持构造函数和方法的定义。

        下面是使用class语法实现继承的示例:

class Parent {
  constructor() {
    this.name = 'Parent';
  }

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

class Child extends Parent {
  constructor() {
    super(); // 在子类构造函数中调用父类构造函数
    this.name = 'Child';
  }
}

const child = new Child();
child.sayHello(); // 输出 "Hello, I am Child"

        使用class语法可以更清晰地表达和组织继承关系,并提供更多的特性和语法糖,例如静态方法、super关键字等。

        继承是面向对象编程中重要的概念之一,它使得代码可以更好地组织、复用和扩展。在实际开发中,根据具体的需求和场景选择合适的继承方式。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值