Javascript继承模式发展史

1.call/apply方法

Grand.prototype.LastName = "Y";function Grand(){}var grand = new Grand();Father.prototype = grand;function Father(){this.name = "hehe";}var father = new Father();Son.prototype = father;function Son(){}var son = new Son();function Person(name,age,sex){this.name = name;this.age = age;this.sex = sex;}function Student(name,age,sex,grade){Person.call(this,name,age,sex);this.grade = grade;}var student = new Student();

2.共有原型实现

     Father.prototype.LastName = "Young";function Father(){}function Son(){}//共有原型Son.prototype = Father.prototype;   var son = new Son();var father = new Father();

运行结果:

3.inherit 转换prototype

将第二种方法进行包装:

Father.prototype.LastName = "Young";function Father(){}function Son(){}function inherit(Target,Origin){Target.prototype = Origin.prototype;}//先继承后应用inherit(Son,Father);Son.prototype.sex =  "male";// 与Father.prototype指向同一空间 ,会改变father有sex属性var son = new Son();var father = new Father();

运行结果:

4.圣杯模式

Father.prototype.LastName = "Young";function Father(){}function Son(){}function inherit(Target,Origin){function F(){};F.prototype = Origin.prototype;Target.prototype = new F();            //与上面一行不能颠倒Target.prototype.constructor = Target;  //son的constructor归位Target.prototype.uber = Origin.prototype;   //储存继承信息}inherit(Son,Father);Son.prototype.sex =  "male";//此时father上面不会出现sex属性var son = new Son();var father = new Father();//son.__proto__ --> new F().__proto__ --> Father.prototype

修改第三种方法的bug。

运行结果:

Final  Yahoo inherit()方法

var inherit = (function(){//私有化变量   var F = function F(){};return function(Target,Origin){F.prototype = Origin.prototype;Target.prototype = new F();         //与上面一行不能颠倒Target.prototype.constructor = Target;  //son的constructor归位Target.prototype.uber = Origin.prototype;}  }());

闭包私有化,加大效率。

Mr.J--JS学习(继承模式发展史)相关推荐

  1. oncreate为什么一定要调用父类的oncreat_为什么你老是讲不清楚JS的继承模式

    点击上方 "前端技术精选" 关注,星标或者置顶 17点30分准时推送,第一时间送达 作者:DBCdouble | 编辑:前端妹 来自:juejin.im/post/68696896 ...

  2. 为什么你老是讲不清楚js的继承模式

    作者:DBCdouble https://juejin.im/post/6869689622676471816 一.前言 相信很多人在遇到面试中都遇到过被问到过JavaScript继承模式的问题,都能 ...

  3. (四)JS学习笔记 - 模式 - 观察者模式

    理解观察者模式 简单的讲,一个对象作为特定任务或是另一对象的活动的观察者,并且在这个任务或活动发生时,利用事件的形式通知观察者. 观察者的使用场合 当一个对象的改变需要同时改变其它对象,并且它不知道具 ...

  4. 你真的理解JS的继承了吗?

    噫吁嚱,js之难,难于上青天 学习js的这几年,在原型链和继承上花了不知道多少时间,每当自以为已经吃透它的时候,总是不经意的会出现各种难以理解的幺蛾子.也许就像kyle大佬说的那样,js的继承真的是' ...

  5. js 原型prototype继承模式

    js中利用原型prototype的方式实现继承是最常见的继承模式,如果让a的实例继承b,原型prototype的继承方式如下: function A(){} function B(){} A.prot ...

  6. JS 继承各种方法的优劣比较 ----JS 学习笔记(五)

    一.原型链继承:基本思想是新建父类的实例,将父类的实例赋给子类的原型对象.这样,子类的原型对象中的 __proto__ 指针就指向父类的原型对象.再新建一个子类的实例,那么子类的实例就同时继承了子类和 ...

  7. 面试官问:JS的继承

    原文作者若川,掘金链接:https://juejin.im/post/5c433e216fb9a049c15f841b 写于2019年2月20日,现在发到公众号声明原创,之前被<前端大全> ...

  8. Node.js学习笔记8

    Node.js学习笔记8 HTTP服务器与客户端 Node.js的http模块,封装了一个高效的HTTP服务器和一个简易的HTTP客户端 http.server是一个基于事件的HTTP服务器,核心由N ...

  9. node.js学习笔记5——核心模块1

    node.js学习笔记5--核心模块1 Node.js核心模块主要内容包括:(1)全局对象 (2)常用工具 (3)事件机制 (4)文件系统访问 (5)HTTP服务器与客户端 一: 全局对象 Node. ...

最新文章

  1. 单页面axios_Axios封装之取消重复请求和接口缓存
  2. MySQL Binlog Mixed模式记录成Row格式
  3. QT事件事件之一:Qt中的事件处理与传递
  4. 麦子mysql_[数据库]MySQL基础 (麦子学员 php 第二阶段)
  5. 计算机语言无限循环,求大神帮我看看为什么我的子程序无限循环无法使用F8停止...
  6. 树莓派3B wiringPi 控制LED小灯
  7. 《集体智慧编程》学习笔记001
  8. 电脑删除的文件如何找回?找回删除的文件有3个方法…
  9. 重新整理的三国9州,郡,地域数据
  10. 中小网站运营推广思路
  11. [Vue warn]: Unknown custom element: <helptext> - did you register the component correctly? For recu
  12. Java零基础笔记自用版(一)
  13. 字符串 匹配首尾字符串 java_java Matcher匹配头尾截取替换字符串的案例
  14. foxipdf和adobe_过去和将来的活动:Adobe Max North America和CFCAMP澳大利亚
  15. linux修改vnc设置密码,更改root与vnc密码,配置vnc
  16. 大数据治理运营整体解决方案
  17. 【稳定性day0】稳定性治理的三种思想—亚马逊、Netflix与蚂蚁金服
  18. 水电图纸——看图纸定位,预埋放管-6
  19. SVM支持向量机的推导(非常详细)
  20. PDF转PPT怎么转?原来这个方法可以免费转

热门文章

  1. 亮点抢先看 | 旷视科技11篇 ICCV 2019 论文概览
  2. 零基础Python学习方法,Python入门必读
  3. 收藏 | 超大模型调参变简单
  4. CVPR最佳作者新作!无监督学习可变形3D对象
  5. 白嫖GPU!Kaggle大神带你打比赛!
  6. 大数据预测实战-随机森林预测实战(四)-模型调参
  7. ArcGIS利用数据驱动工具条批量出图(python代码)
  8. 保存时间 默认_操作技能|WORD文档没保存,有办法恢复吗?
  9. php极客时间,PHP日期与时间
  10. ansys怎么使用anand模型_当SpaceClaim 遇上ANSYS