javascript继承,无任是类式继承,原型式继承还是渗元式继承都是通过不同方法去围绕着prototype转,简单分析下三种不同继承方法是如何围绕prototype转的

一:类似继承,先上关键代码

function extend(subClass,supClass){
  var fn = function(){};
  fn.prototype = supClass.prototype;
  subClass.prototype = new fn();
  subClass.prototype.constructor = subClass;
  subClass.supClass = supClass;           
  if(supClass.prototype.constructor == Object){
    supClass.prototype.constructor = supClass;
  }

}

首先通过代码可以看出这个是类与类的继承,通过把子类的prototype设置成new一个空的构造函数,改空的构造函数的prototype是父级类的prototype,好处是类与类之间的结构比较明确,

使用参考代码:

function FormField(){
  this.init.apply(this,arguments)
}
FormField.prototype = {
  init:function(){
    console.log("init");
    this.bind();
  },
  bind:function(){
    console.log("bind");
  }
};

function FormArea(){
  this.constructor.supClass.call(this);

};

extend(FormArea,FormField);
var formArea = new FormArea();

二:原型式继承,先上关键代码

function clone(obj){
  var fn = function(){};
  fn.prototype = obj;
  return new fn();

}

该方式优点是节约内存,无需上面那些类的各种指向,当前方式的有点恰巧也是他的缺点,改方式会共享他们的指针,特别是当指向的是一个对象或者数组的时候,得小心,clone出来的同事要重新复制替换掉之前的指向,另外同类式继承最大的区别,是类式继承是通过prototype = new XXX(某个父类),而原型是直接把prototype设置成一个字面量对象,

使用参考代码:

var formField = {

  init:function(){

  }

}

var formArea = clone(formField);

formArea.init();

三:渗元式,先上关键代码

function augment(receveClass,giveClass){
  if(arguments.length == 2){
    for(var i in giveClass.prototype){
      if(!receveClass.prototype[i]){
        receveClass.prototype[i] = giveClass.prototype[i]
        }
    }
  }else{
    var args = [].slice.call(arguments,2);
    for(var j=0, len=args.length; j<len; j++){
    if(!receveClass.prototype[args[j]]){
      receveClass.prototype[args[j]] = giveClass.prototype[args[j]];
      }
    }
  }
}

由于javascript是不能实现继承多个父类的,因为它就一个prototype,所以可以通过上面的方法去扩展prototype的方式去模拟继承多个父类的效果,

使用参考代码:

function Minx(){}
  Minx.prototype = {
  sayName:function(){
    p("sayName")
  },
  sayAge:function(){
    p(29);
  }
}       
function Person(){};
augment(Person,Minx,"sayName");
var p1 = new Person();
p1.sayName();

总结:

适应场合:方式一适合构造过程中需要传值去区分不同对象的情况,方式二适合带有很多默认属性,而大部分默认属性又都相同场合,且比较节约内存,方式三适合多个差异度很大的累,但是这些类里的某个方式又一样的场合下

转载于:https://www.cnblogs.com/samKR/p/3785199.html

浅谈javascript继承【读javascript设计模式第四章节继承有感】相关推荐

  1. 老姚浅谈:怎么学JavaScript?

    大家好,我是若川.当初我就是看本文深受启发,开始看书读源码.所以现在联系了作者@老姚 授权转载分享给大家.我按照文中的做法敲完了<JavaScript语言精粹 修订版>,在2017年7月2 ...

  2. 浅谈全局视角下的设计模式

    写在前面: 以下内容,更多的是自己的思考总结,不可避免出现有争议的地方,请谨慎食用. 浅谈全局视角下的设计模式 1.业务开发经常使用的设计模式有哪些? 2.为什么有些设计模式不常见呢? 3.为什么这些 ...

  3. python如何拼读英语单词怎么写_浅谈如何拼读英语新单词

    浅谈如何拼读英语新单词 语音教学是英语教学的一个重要组成部分. 如果学生能够掌握好语音, 既能 增强学习英语的信心, 又能提高学习英语的积极性, 我认为如果学生能够学好英 语语音, 比较准确地听懂英语 ...

  4. 《浅谈12306核心模型设计思路和架构设计》阅读有感

    <浅谈12306核心模型设计思路和架构设计>阅读有感 12306的业务复杂度远远比淘宝天猫这种电商网站要复杂.一般的电商网站,购买都是基于商品的概念,每个商品有一定量的库存,用户的购买行为 ...

  5. 浅谈href=#与href=javascript:void(0)的区别

    #"包含了一个位置信息 默认的锚点是#top 也就是网页的上端 而javascript:void(0)  仅仅表示一个死链接 这就是为什么有的时候页面很长浏览链接明明是#可是跳动到了页首 而 ...

  6. 前端网老姚浅谈:怎么学JavaScript?

    作者:小不了 链接:https://zhuanlan.zhihu.com/p/23265155 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 鉴于时不时,有同学私信 ...

  7. 浅谈JS之text/javascript和application/javascript

    问题描述: JS在IE8以下浏览器运行异常 代码: <script>标签是这样子写的: <script type="application/javascript" ...

  8. 浅谈开发中常用的设计模式

    设计模式在开发中占很重要的地位.在大型项目中使用好设计模式往往会取得事半功倍的效果.本篇博客就介绍下几种在开发中常用到的设计模式. 设计原则 先看下一些约定俗成的设计原则,其实要遵守以下所有原则很难, ...

  9. 浅谈Spring框架应用的设计模式(一)——工厂模式

    文章目录 前言 一.工厂模式介绍 1.简单工厂模式 (1)静态工厂模式 (2)利用反射机制实现的简单工厂 2.工厂方法模式 3.抽象工厂模式 二.Spring框架中工厂模式的重要应用 1.BeanFa ...

最新文章

  1. str.split() 与 str.split(‘ ‘)区别
  2. windows 下实现函数打桩:拦截API方式
  3. 输出apk_KT被横扫吞下五连败果 APK拿下首胜 小夫笑得十分开心
  4. SAP Spartacus autofocus directive,如何锁住使用了directive的元素本身?
  5. 海量数据寻找最频繁的数据_在数据中寻找什么
  6. pyqt5实时动态曲线
  7. 有偿数据收集 | 哈工大手写作文图片收集
  8. com.android.mms 占cpu,怎么CPU占用这么高啊!
  9. Javascript字符串长度返回错误的原因
  10. mysql缺少函数_总结零散的 MySQL 基础知识
  11. 快速生成移动设备应用图标的在线工具 - makeappicon
  12. 阿里巴巴前架构师 360 度无死角剖析微服务
  13. oppok3如何刷机_OPPO K3(6GB/64GB/全网通)手机密码忘记怎么刷机?
  14. 经纬度 距离 mysql_mysql 根据经纬度计算距离并排序
  15. 2020PayPal提现有哪些渠道?听说注册义乌个体户也可以!
  16. 应用统计学方差分析之单因素方差分析原理解析(含Python代码)
  17. uni-app和H5页面使用支付宝登陆问题解决
  18. Kroll任命Richard Davies担任网络风险业务副董事总经理,常驻香港
  19. 这样的钓鱼邮件,你会中招吗?
  20. php的表达爱意的一句代码,含蓄表达爱意的爱情诗句(70条)

热门文章

  1. linux下利用C或C++语言调用需要root权限的函数
  2. ssldump0.9b3版本的源码分析
  3. 《数据库SQL实战》获取所有非manager的员工emp_no
  4. 数据挖掘之关联分析一(基本概念)
  5. ElasticSearch Java Api(二) -检索索引库
  6. 聊聊JVM(六)理解JVM的safepoint
  7. sklearn中模型的选择和各个模型的比较
  8. Tomcat源代码阅读系列之八:Tomcat 设计模式总结
  9. Django中ORM之或语句查询
  10. 最新设备可利用积雪发电?UCLA研究出积雪式摩擦奈米发电机