web前端tips:js继承——借用构造函数继承

输入图片描述

上篇文章给大家分享了 js继承中的原型链继承

web前端tips:js继承——原型链继承

在文章末尾,我提到了

原型链的继承,子类需要传递参数给父类的构造函数,就无法通过直接调用父类的构造函数来实现,需要通过中间的过程来传递参数

那这篇文章,也就能解决这个传参问题了。

借用构造函数继承

又叫经典继承,它通过在子类构造函数中调用父类构造函数来继承父类的属性和方法。

借用构造函数继承的核心思想是,在子类构造函数中使用 call()apply() 方法调用父类构造函数,并将子类实例作为参数传递给父类构造函数。这样就能够在子类实例中创建父类的属性,并且每个子类实例都有它们自己的属性副本。

以下是借用构造函数继承的基本步骤:

  1. 定义父类构造函数,设置父类的属性和方法。
  2. 定义子类构造函数,使用 Parent.call(this, ...) 在子类中调用父类构造函数,并传递子类特有的参数。
  3. 在子类构造函数中定义子类的属性和方法。
// 1
function Parent(name) {
  this.name = name
  this.arr = [1,2,3]
}

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

// 实例化
var child = new Child('我是 child', 666)
child.name // 我是 child
child.arr // [1,2,3]
child.age // 666

通过以上步骤,我们就实现了简单的借用构造函数继承,也解决了原型链继承传参问题。

并且由于每个子类实例都有它们自己的属性副本,所以对属性修改是不会互相影响的:

var child1 = new Child('我是 child1', 111)
var child2 = new Child('我是 child2', 222)
child1.arr.push(4)
child1.arr // [1,2,3,4]
child2.arr // [1,2,3]

优点

  • 子类实例具有独立的属性,不会共享父类实例的属性。
  • 子类可以向父类构造函数传递参数。

缺点

  • 无法继承父类原型链上的方法和属性,只能继承父类构造函数中的属性和方法。
function Parent(name) {
  this.arr = [1,2,3]
}
Parent.prototype.getArr = function() {
  return this.arr
}
function Child() {
  // 借用父类构造函数
  Parent.call(this)
}
// 实例化
var child = new Child()
child.getArr() // Uncaught TypeError: child.getArr is not a function
  • 父类的方法无法复用,每个子类实例都会创建一份方法的副本。

需要注意的是,借用构造函数继承只是继承了父类构造函数中的属性和方法,并没有真正实现完全的继承。如果希望子类也能继承父类的原型链上的方法和属性,可以使用其他方式,如组合继承、寄生组合继承等。

结语

牵手 持续为你分享各类知识和软件 ,欢迎访问、关注、讨论 并留下你的小心心❤

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值