【JavaScript】面向对象之继承

本文详细介绍了JavaScript面向对象中的继承机制,包括原型链的概念、如何通过原型链实现继承及其弊端,以及借用构造函数、原型式继承、寄生式继承和寄生组合式继承等不同的继承策略。作者还讨论了每种继承方式的优缺点和适用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

重学JavaScript06----- 面向对象之继承


继承

继承可以帮助我们将重复的代码和逻辑抽取到父类中,子类只需要直接继承过来使用即可。

1、了解原型链

在真正实现继承之前,我们先来理解一个非常重要的概念:原型链
在这里插入图片描述

从一个对象上获取属性,如果在当前对象中没有获取到就会去它的原型上面获取
在这里插入图片描述

2、Object的原型

原型链最顶层的原型对象就是Object的原型对象

原型链的尽头 [Object: null prototype] {}

  • 特殊一:该对象有原型属性,但是它的原型属性已经指向的是null,也就是已经是顶层原型了;
  • 特殊二:该对象上有很多默认的属性和方法

3、通过原型链实现继承

了解完原型链,就可以利用原型链来实现继承了

// 父类: 公共属性和方法
function Person() {
   
  this.name = "蜘蛛侠"
  this.friends = []
}

Person.prototype.eating = function() {
   
  console.log(this.name + " eating~")
}

// 子类: 特有属性和方法
function Hero() {
   
  this.age= 111
}

var p = new Person()
Hero.prototype = p

Hero.prototype.killing = function() {
   
  console.log(this.name + "正在大开杀戒")
}


// name/age
var hero = new Hero()

// console.log(hero.name)
// hero.eating()

// hero.killing ()


// 原型链实现继承的弊端:
// 1.第一个弊端: 打印hero对象, 继承的属性是看不到的
console.log(hero)

// 2.第二个弊端: 创建出来两个hero的对象
var hero1 = new Hero()
var hero2 = new Hero()

// 直接修改对象上的属性, 是给本对象添加了一个新属性
hero1.name = "金刚狼"
console.log(hero2)

// 获取引用, 修改引用中的值, 会相互影响
hero1.friends.push("蝙蝠侠")

console.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值