JS之理解继承:https://segmentfault.com/a/1190000010468293

1.call继承,也叫借用构造函数伪造对象或是经典继承call继承回把父类的私有属性和方法继承给子类私有;父类公有属性(原型上的属性)无关。当然这里的call也可以用apply

//父类F     //子类S
function S(){
F.call(this)
}//原理就是改变F中的this指向,指向S的实例,子类会获得父类F的私有属性和方法

2.原型链继承:在1中通过call继承到了父类的私有属性和私有方法。下一步就是有共有属性和方法。原型链继承把父类私有和公有的属性,都给了子类公有,子类的原型作为父类的实例。原型链继承会使得父类的私有属性在子类的私有和公有都得到继承。

function S(){};
//把子类公有的作为父类的实例;
S.prototype=new F;
let s=new S;

3.冒充继承:通过遍历父类的属性,把父类私有+公有的的属性都给了子类私有。for in循环,只能遍历自定义的属性和方法;拿不到系统的属性和方法,例如constructor

   function S(){
for(var attr in f){
this[attr]=f[attr];}}
let s=new S;

4.混合继承1call继承+原型链继承;子类私有中有父类私有的,子类公有也有父类私有;;

 //子类私有继承父类私有;
function S(){ F.call(this)}; //子类公有继承父类私有——公有
S.prototype=new F;
let s=new S;

5.混合继承2call继承+拷贝继承(extend),通过extend方法遍历父类原型上的方法,并复制给子类的原型。

   //子类私有继承父类私有;
function S(){F.call(this);} //通过extend方法进行拷贝继承公有
extend(S.prototype, F.prototype);
let s=new S; //extend方法
function extend(obj2,obj1){
for(var attr in obj1){
obj2[attr]=obj1[attr]}

6.混合继承3call继承+Object.create(),这也是ES6class继承extends的原理,点这

//子类私有继承父类私有;
function S(){F.call(this)} S.prototype = Object.create(F.prototype,{constructor:{value:S}}) //Object.create()原理
function Tmp(){};
Tmp.prototype= F.prototype;
S.prototype=new Tmp;
S.prototype.constructor=S;
//********* let s=new S;

目前比较常用的是混合继承2和混合继承3,子类能很清晰的继承父类的公有和私有。

最新文章

  1. diff & pattch 命令
  2. .htaccess根据IP地址限制访问
  3. POJ 1844 Sum
  4. wpf 自定义依赖性属性 作用之一 对数据绑定的支持
  5. OpenJDK1.8.0 源码解析————HashMap的实现(一)
  6. 关于session_start()这个问题
  7. C语言学习第三章
  8. .Net Web开发技术栈
  9. 使用flex
  10. GIS 案例教程-蜂窝多边形制作模型
  11. python积累二:中文乱码解决方法
  12. SQLite 学习笔记(一)
  13. oracle完全恢复数据库
  14. reduceByKey和groupByKey区别与用法
  15. LeetCode: Generate Parentheses 解题报告
  16. banwagon vps装wordpress
  17. vijos p1777 引水入城(bfs+贪心)
  18. Git学习环境搭建和git对用户的增删改查命令
  19. 【数据库】E-R模型
  20. ie,360浏览器出现无法打开网页(包括本地html)的解决方法

热门文章

  1. 【leetcode】1185. Day of the Week
  2. Python Number(数字) Ⅰ
  3. priority_queue与multiset
  4. java+web+批量下载文件
  5. 浙大PAT CCCC L3-001 凑零钱 ( 0/1背包 && 路径记录 )
  6. 牛客网 TaoTao要吃鸡 ( 0/1背包变形 )
  7. 类锁和对象锁,synchronized修饰static方法与非static方法的区别
  8. 1.8 全新日期api
  9. oracle11g安装补丁升级
  10. android intent调用系统camera