JS原型链和继承

在JavaScript中,原型链是实现继承的核心机制。

原型链基础:

  • 每个JS对象都有一个隐藏的__proto__属性,指向它的原型对象
  • 当访问对象的属性时,如果对象本身没有该属性,就会沿着原型链向上查找
  • 原型对象也有自己的原型,最终指向null,形成一条链式结构

构造函数与原型:

  • 构造函数通过prototype属性关联原型对象
  • 使用new创建实例时,实例的__proto__会自动指向构造函数的prototype
  • 例如:function Person(){},Person.prototype就是所有Person实例的原型

继承实现方式:

  •  原型链继承:通过将子类的原型指向父类的实例实现继承
  • 构造函数继承:在子类构造函数中调用父类构造函数
  • 组合继承(最常用):结合原型链继承和构造函数继承的优点

ES6类继承:

使用class和extends语法糖,底层仍然是基于原型链

示例代码:

// 父类
function Animal(name) {
  this.name = name
}
Animal.prototype.speak = function() {
  console.log(this.name + ' makes a noise.')
}

// 子类
function Dog(name) {
  Animal.call(this, name) // 构造函数继承
}
Dog.prototype = Object.create(Animal.prototype) // 原型链继承
Dog.prototype.constructor = Dog // 修复构造函数指向

const d = new Dog('Buddy')
d.speak() // 输出: Buddy makes a noise.

这段代码展示了组合继承的实现方式,通过原型链实现了方法的共享和属性的独立。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Winter Li

拜托拜托,老板赏赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值