1. 原型式继承方法

js 继承使用不难,要说清楚,需要自己一定总结,才能说清楚。

es5 的继承方式有很多种,这个是 js 语言本身造成,但是类实现继承之后的功能,有如下 3 条:

  1. 子类继承父类,主要继承父类的原型上的属性和方法,和可以自定义子类继承父类的构造函数里的属性和方法
  2. 重写子类原型的属性和方法时,父类的原型的属性和方法不会更改
  3. 子类没有重写继承父类属性和方法,父类重写子类继承父类的属性和方法时,子类的原型上的属性和方法也会跟着重写

es5 继承最主要的原型式继承方法,这个函数步骤分为 4 步骤:

  1. 创建一个中间的构造函数Fn,Fn.prototype = Super.prototype
  2. 实例化 Fn 为 var fn = new Fn(),将 Child.prototype = fn
  3. Child.prototype.constructor = Child
  4. Child 构造函数中封装一个 super 方法,来继承父类里的构造函数。

ps:当然步骤 1 和 2 可用 Object.create() 来替代。

代码如下:

function extends (Sup, Sub) {
// var Fn = function () {}
// Fn.prototype = Sup.prototype
// var fn = new Fn()
// Sub.prototype = fn
Sub.prototype = Object.cteate(Sup.prototpye)
Sub.prototype.constructor = Sub
} function super (Sup) {
var args = []
if (arguments.length > 1) {
args = Array.protoype.slice.call(arguments, 1)
}
Sup.apply(this, args)
}
function Sup (name) {
this.name = name
}
function Sub (name) {
super(Sup, name)
} extends(Sup, Sub)

内存分析:

2. 其他继承方式

明白上面一种方式,其他几种方法,就很容易理解。

借用构造函数

子类只继父类构造函数里的属性,不继承原型

组合继承

子类原型上继承父类所有定义属性,如果子类可以自定义继承构造函数里的属性

其他,略

es5原型式继承间解的更多相关文章

  1. javascript中类式继承和原型式继承的实现方法和区别

    在所有面向对象的编程中,继承是一个重要的话题.一般说来,在设计类的时候,我们希望能减少重复性的代码,并且尽量弱化对象间的耦合(让一个类继承另一个类可能会导致二者产生强耦合).关于“解耦”是程序设计中另 ...

  2. [js高手之路]原型式继承与寄生式继承

    一.原型式继承本质其实就是个浅拷贝,以一个对象为模板复制出新的对象 function object( o ){ var G = function(){}; G.prototype = o; retur ...

  3. 理解JavaScript原型式继承

    0.基础 javascript没有类的概念, javascript不需要实例化某个具体类的实例.javascript对象本身可以用来创建对象, 而对象可以继承自其他对象, 这个概念称为原型式继承 每个 ...

  4. JavaScript中的类式继承和原型式继承

    最近在看<JavaScript设计模式>这本书,虽然内容比较晦涩,但是细品才发现此书内容的强大.刚看完第四章--继承,来做下笔记. 书中介绍了三种继承方式,类式继承.原型式继承和掺元类继承 ...

  5. JavaScript ----------------- 原型式继承

    思想:借助原型可以基于已有的对象创建新对象,同时还不必因此创建自定义类型.为了达到这个目的,看看下面的实现方式 function object(o){ function F(){ } F.protot ...

  6. JavaScript之面向对象学九(原型式继承和寄生式继承)

    一.原型式继承 该继承模式是由道格拉斯*克罗克福德在2006年提出的实现继承的方法. 模式的基本思路:借助原型可以基于已有的对象创建新的对象,同时还不必因此创建自定义类型. 代码如下: functio ...

  7. JavaScript继承基础讲解,原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承

    说好的讲解JavaScript继承,可是迟迟到现在讲解.废话不多说,直接进入正题. 既然你想了解继承,证明你对JavaScript面向对象已经有一定的了解,如还有什么不理解的可以参考<面向对象J ...

  8. js原生继承之——原型式继承实例

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  9. Javascript继承4:洁净的继承者----原型式继承

    //原型式继承 function inheritObj(obj){ //声明一个过渡函数对象 function F(){} //过渡对象的原型继承父对象 F.prototype = obj; //返回 ...

随机推荐

  1. 代码中三种特殊注释——TODO、FIXME、XXX

    在eclipse中,TODO.FIXME和XXX都会被eclipse的task视图所收集.在项目发布前,检查一下task视图是一个很好的习惯.进入window→show view→Other→输入ta ...

  2. Java对象模型规约

      下面是我根据工作中项目的经验,总结的一套自己觉得比较方便的对象模型规约   model(实体模型)      -vo(与前端交互的对象模型,前端泛指页面.移动端和远程服务调用等)         ...

  3. yapi部署

    官方提供了两种安装方式,由于环境或者权限问题可能会遇到不少麻烦 最简单的安装方式: 第一种方式 npm install -g yapi-cli --registry https://registry. ...

  4. AD证书导入文档(单向认证)

    AD证书或者SSL证书导入的方法步骤(在root用户下操作) 1.  将证书命名为AD-PRO.cer,并确定证书的颁发. 2.  将/app/ad_cert/keystore下的原有证书删除掉和文件 ...

  5. Composer更新慢的解决方案

    有两种方式启用镜像服务: 系统全局配置: 即将配置信息添加到 Composer 的全局配置文件 config.json 中. 单个项目配置: 将配置信息添加到某个项目的 composer.json 文 ...

  6. Visual Studio 2013 突然不高亮,编译报错

    同事的电脑,估计是windows更新失败的原因,C盘容量减小到不到1G,VS的高亮也坏了,重启后硬盘容量增加了但是仍然不高亮. 解决办法记录一下: 重置下. 开始菜单 -->所有程序--> ...

  7. 一步步建立 Vue + Cesium 初始化项目

    一步步建立 Vue + Cesium 初始化项目 初始化 Vue 项目 升级 npm npm install -g npm 安装 @vue/cli 和 @vue/cli-service-global ...

  8. Ethereum(1)—— 基本介绍

    1 环境安装 安装Ethereum 协议的Go语言的最新实现. git clone https://github.com/ethereum/go-ethereum.git make all cd bu ...

  9. ETL测试教程

    在我们了解ETL测试之前,先了解有关商业智能和数据仓库的重要性. 让我们开始吧 - 什么是BI? 商业智能是收集原始数据或业务数据并将其转化为有用和更有意义的信息的过程. 原始数据是一个组织每日事务的 ...

  10. eclipse导入新项目配置jdk、tomcat到浏览器正常访问

    好记性不如烂笔头,长时间不操作就会生疏,在此做个笔记 1.导入项目 2,进入选择项目,点finish完成,导入成功 3.配置tomcat和jdk 选择本地相对应jdk的jre 选择tomcat版本进行 ...