js继承 - 原型式继承、寄生式继承

原型式继承

基本思路:将需要继承的属性和方法放到一个对象上,然后将这个对象放到原型上。
怎么做呢?看下例子:

const util = {
  name: 'util',
  wealth: ['house', 'car']
}
function utilFn(util) {
  function fn(){}
  // 这里可以对传入的util进行修改,比如:
  util.weight = '80'
  // 这一步就是将对象放到原型上了
  fn.prototype = util
  // 最后返回实例,这样后面通过这个方法生成的都将是fn的实例,也自然继承了util
  // 这样做自然会带来一个问题,就是引用类型的值会被所有的实例共享,看后面的打印就知道了
  return new fn()
}

const p1 = utilFn(util)
p1.name = 'p1'
p1.wealth.push('$')
const p2 = utilFn(util)
p2.name = 'p2'
p2.wealth.push('¥')
console.log(p1, p2)

![在这里插入图片描述](https://img-blog.csdnimg.cn/2021012418274621.png

utilFn函数也可以用Object.create()替代:

const util = {
  name: 'util',
  wealth: ['house', 'car']
}
const p1 = Object.create(util, {weight: {value: '80'}})
p1.name = 'p1'
p1.wealth.push('$')
const p2 = Object.create(util, {weight: {value: '80'}})
p2.name = 'p2'
p2.wealth.push('¥')
console.log(p1, p2)

在这里插入图片描述

寄生式继承

基本思路:同样是将需要继承的属性和方法放到一个对象上,然后通过一个函数对它进行个性化修改,最后返回修改后的对象

const util = {
  name: 'util',
  wealth: ['house', 'car']
}
function utilFn(util) {
  return Object.create(util, {weight: {value: '80'}})
}
const p1 = utilFn(util)
p1.name = 'p1'
p1.wealth.push('$')
const p2 = utilFn(util)
p2.name = 'p2'
p2.wealth.push('¥')
console.log(p1, p2)

在这里插入图片描述

utilFn也可以不用Object.create,其他任何可以做到修改util并返回新对象的方式都可以,比如:

function utilFn(util) {
 const clone = Object(util)
 clone.weight = '80'
 return clone
}

再比如:

function utilFn(util) {
  const clone = JSON.parse(JSON.stringify(util))
  clone.weight = '80'
  return clone
}

为什么将这两种模式放一起,因为他们的思路差不多。

THE END

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值