继承我的理解是 一个对象 能够使用另一个对象的方法和属性

继承需要一个父类构造函数

一、通过原型链继承

通过 创建一个 Person 的实例对象,该对象身上 不仅有 name 和 age 等方法, 也可以访问到原型链上的属性和方法

缺点是 继承的子类共用一个原型,当遇到 引用类型时, 互相影响

二、通过构造函数继承

1、首先肯定需要通过 new Son() 来触发Person.call(this)

2、new Son()时 创建了一个 新对象,修正该新对象的__proto__属性和constructor属性

3、在新对象内部创建一个属性指向this,也就是Son,如 child.fn = Son 方法,然后指向该方法,相当于在新对象child内部执行一次Son,执行完后删除该属性fn,这就是new的执行过程

4、Person.call 执行过程: 同样的,相当于在Son内部执行一次Person,通过this改变指向,this指向的就是新对象child

5、所以新对象有 name = ‘xiaobai’,age = ‘20’ 这两个属性

缺点:无法访问Person原型对象上的属性

三、组合继承(一和二合并)

该方法既可以获得 实例属性,也可以访问Person原型链上的方法

但是在Person.call 和 new Person时获取了两份一样的实例属性,比较浪费

四、寄生组合式继承

该方式主要是通过 共享原型 的方式来实现继承,但是有一个问题,就是 子类不能 随意添加属性和方法

这就需要通过一个中间人来解决,通过Object.create 创造出来的对象,这个对象的原型对象 指向传入的参数

下面有Object.create的原理

小白一个,欢迎指正

最新文章

  1. Morris.js和flot绘制折线图的比较
  2. openwrt-智能路由器hack技术(1)---"DNS劫持"
  3. Sql Server2005恢复备份数据库问题-Error:3154 3219
  4. Node.js的颠覆者:PHP的Swoole扩展
  5. .NET获取不到js写的cookie解决方法
  6. The given path's format is not supported.
  7. ZOJ3527
  8. 基于Http协议订阅发布系统设计
  9. 【leetcode】349. Intersection of Two Arrays
  10. Vue源码后记-其余内置指令(2)
  11. 使用asyncsocket群聊
  12. springboot整合系列
  13. java排序算法(七):折半插入排序
  14. Linux 桌面玩家指南:09. X Window 的奥秘
  15. SQLServer之创建DML AFTER INSERT触发器
  16. Vue入门:Vue环境安装
  17. Day5 装饰器和文件操作
  18. Linux中常用压缩打包工具
  19. python学习笔记5--json处理
  20. Doxygen生成C++中文文档配置注意事项

热门文章

  1. lemon使用方法
  2. UltraISO制作系统安装盘
  3. PHP preg_filter() 函数
  4. Skill 脚本演示 ycChangeLayerToEntry.il
  5. 解决IIS发布时CS0016未能写入输出文件错误
  6. Chrome太占内存?试试这个
  7. JVM补充篇
  8. 使用webgl(three.js)创建科技版3D机房,3D机房微模块详细介绍(升级版三)—— 1
  9. java_数据类型转换、运算符
  10. C# Thread.Name 的作用和意义