【JS如何实现继承?】


在JavaScript中,可以通过以下方式实现继承:

原型链继承

  1. 原型链继承:利用原型链实现继承,通过将子类的原型指向父类实例来继承父类的属性和方法。示例代码如下:
function Parent() {
  this.name = 'Parent';
}
Parent.prototype.sayHello = function() {
  console.log('Hello, I am ' + this.name);
}

function Child() {}
Child.prototype = new Parent();

var child = new Child();
child.sayHello();  // Hello, I am Parent

构造函数继承

  1. 构造函数继承:在子类构造函数中调用父类构造函数,通过apply或call方法继承父类的属性和方法。示例代码如下:
function Parent(name) {
  this.name = name;
}
Parent.prototype.sayHello = function() {
  console.log('Hello, I am ' + this.name);
}

function Child(name, age) {
  Parent.call(this, name);  // 调用父类构造函数
  this.age = age;
}

var child = new Child('Child', 10);
child.sayHello();  // Error: child.sayHello is not a function

组合继承

  1. 组合继承:结合原型链继承和构造函数继承,既继承了父类原型上的属性和方法,又继承了父类构造函数中的属性和方法。示例代码如下:
function Parent(name) {
  this.name = name;
}
Parent.prototype.sayHello = function() {
  console.log('Hello, I am ' + this.name);
}

function Child(name, age) {
  Parent.call(this, name);  // 调用父类构造函数
  this.age = age;
}
Child.prototype = new Parent();  // 继承父类的原型

var child = new Child('Child', 10);
child.sayHello();  // Hello, I am Child

寄生组合继承

  1. 寄生组合继承:在组合继承的基础上,通过一个空函数来避免调用两次父类构造函数。示例代码如下:
function Parent(name) {
  this.name = name;
}
Parent.prototype.sayHello = function() {
  console.log('Hello, I am ' + this.name);
}

function Child(name, age) {
  Parent.call(this, name);  // 调用父类构造函数
  this.age = age;
}

function inheritPrototype(child, parent) {
  var prototype = Object.create(parent.prototype);  // 创建父类原型的副本
  prototype.constructor = child;  // 修正副本的constructor
  child.prototype = prototype;  // 将修正后的副本赋值给子类原型
}
inheritPrototype(Child, Parent);  // 继承父类原型

var child = new Child('Child', 10);
child.sayHello();  // Hello, I am Child
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值