2、JS_继承的几种方法

3 篇文章 0 订阅

一、原型链

  1. 基本构想:通过原型继承多个引用类型的属性和方法。
  2. 构造函数、实例、原型三者之间的关系
  • 每个构造函数都有一个原型对象(prototype),原型对象有一个属性(constructor)指回构造函数,而实例对象有一个内部指针(proto 隐式原型) 指向原型对象。下面来看一个例子
    在这里插入图片描述
    -> 从上面例子我们可以清楚原型搜索机制:在读取实例上的属性时,首先会在实例上搜索这个属性。如果没找到,则会继承搜索实例的原型。在通过原型链实现继承之后,搜索就可以继承向上,搜索原型的原型。
  1. 默认情况下,所有引用类型都继承于Object。
  2. 判断原型和继承之间关系
  • instanceof:,如果一个实例的原型链中出现过相应的构造函数,则 instanceof 返回 true。
    在这里插入图片描述
  • isPrototypeOf: 判断原型链中是否包含这个原型,返回true/false值
    在这里插入图片描述
  1. 方法的重写
//后面定义的方法覆盖前面(正确姿势)
SubType.prototype.getSuperStatus = function() {
    return true
}

–>若是以对象字面量的形式创建原型方法的话,会破坏原型链,因为这相当于重写了原型链。
在这里插入图片描述
6. 原型链的两个问题
1)原型中包含的引用值会在所有实例间共享,会相互污染。
在这里插入图片描述
2)实例化的时候,不能往构造函数中传参。

二、盗用构造函数

  1. 用途:用来解决原型中引用类型相互污染

  2. 方法:在子类构造函数中调用父类构造函数
    在这里插入图片描述

  3. 优点:相对于原型链来说,可以传递参数
    在这里插入图片描述

  4. 缺点
    1)函数不能重用。因为必须在构造函数中定义方法
    2)子类构造函数不能访问父类构造函数原型上的方法

三、组合继承(结合一和二的优点)

  1. 实现思路:使用原型链继承原型上的方法和属性,使用盗用构造函数继承实例属性。
    在这里插入图片描述
  2. 总结:组合继承弥补了原型链和盗用构造函数的不足,是 JavaScript 中使用最多的继承模式。而且组合继承也保留了 instanceof 操作符和 isPrototypeOf()方法识别合成对象的能力。

四、原型式继承

  1. 出发点:即使不自定义类型也可以通过原型实现对象之间的信息共享
  2. 适用情况:有一个对象,想在它的基础上再创建一个新对象。你需要把这个对象先传给 object(),然后再对返回的对象进行适当修改。但是同样的,属性中包含的引用类型数据会在相关对象间共享,这点跟原型模式一样。
  3. 通过Object.create(参数1, 参数2(可选)) 来实现
  • 参数1:作为新对象原型的对象
  • 参数2:给新对象额外定义属性的对象
    在这里插入图片描述

五、寄生式继承

  1. 基本概念:创建一个实现继承的函数,以某种方式增强对象,然后返回这个对象。
    在这里插入图片描述
  2. 缺点:给对象添加函数的话,会导致函数难以复用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值