ES5常用的组合继承及原型链理解

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>ES5常用的组合继承及原型链理解</title>
</head><body></body>
<script>// ES5常用的组合继承// 父类构造方法function Parent(name) {this.name = name;this.nums = [1, 2, 3, 4]}Parent.prototype.log_Parent = function () {console.log('parent姓名:' + this.name);}// 子类构造方法function Child(name, age) {Parent.call(this, name);//继承关键1:子类的构造方法沿用父类的构造方法this.age = age;}Child.prototype = new Parent();//继承关键2:子类的构造函数原型用父类的一个实例赋值Child.prototype.log_Child = function () {console.log('Child姓名:' + this.name);console.log('Child年龄:' + this.age);}// 声明子类实例let c2 = new Child('小红', 20);// 原型链console.log('--------------- 原型链 ---------------');console.log(Child);//Child构造函数console.log(Child.prototype);//Child构造函数生成的原型对象console.log(Child.prototype.constructor);//Child构造函数生成的原型对象访问构造函数let c1 = new Child('Child类的一个实例', 1);//如果继承Parent类则也是Parent类的一个实例console.log('----- Child类的一个实例,一直点__proto__属性看看 -----');console.log(c1);//Child类的一个实例,实例调用一个方法(或属性),若实例成员中没有,浏览器会自动访问__proto__对象,若没有找到还会再访问__proto__对象里面的__proto__对象直到找到此方法后执行并结束查找或一直到达最顶层的null也没有找到此方法同样结束自动查找调用,这是浏览器对ES5原型链支撑的一个重要的机制console.log(c1.__proto__);//c1访问Child原型,默认等于Child.prototype,由于继承父类一般又被赋值为new Parent()console.log(c1.__proto__.__proto__);//c1访问Child原型再访问父类Parent原型console.log(c1.__proto__.__proto__.__proto__);//c1访问Child原型再访问父类Parent原型再访问祖先Object原型console.log(c1.__proto__.__proto__.__proto__.__proto__);//c1访问Child原型再访问父类Parent原型再访问祖先Object原型然后就只有null了console.log(new Parent('Parent类的一个实例'));//父类的实例,赋值给Child.prototype,自然会与c1.__proto__相同console.log(Parent.prototype);//父类的原型console.log(Parent.prototype.constructor);//父类原型的构造函数console.log('--------------- ---------------');c1.log_Child();//Child姓名:Child类的一个实例  Child年龄:1c2.log_Parent();//parent姓名:小红console.log(c1.age); // 1console.log(c2.age); // 20 c1.nums.push(9);// [1,2,3,4,9]console.log(c1.nums);  // [1,2,3,4,9]console.log(c2.nums); // [1,2,3,4]  复合型数据有独立空间,未被其它实例干扰console.log(c1 instanceof Child); // trueconsole.log(c1 instanceof Parent); // true c1既是Parent的实例,也是Child的实例</script></html>

@沉木

ES5常用的组合继承及原型链理解相关推荐

  1. JS中对象的四种继承方式:class继承、原型链继承、构造函数继承、组合继承(构造函数和原型链继承的结合)

    前言 才发现之前没有对JavaScript中的继承做过总结,不过看得到是不少,接下来就对这几种继承方式做一下总结. class继承 class继承是ES6引入的标准的继承方式. ES6引入了class ...

  2. 一篇JavaScript技术栈带你了解继承和原型链

    作者 | Jeskson 来源 | 达达前端小酒馆 1 在学习JavaScript中,我们知道它是一种灵活的语言,具有面向对象,函数式风格的编程模式,面向对象具有两点要记住,三大特性,六大原则. 那么 ...

  3. JavaScript之继承(原型链)

    JavaScript之继承(原型链) 我们知道继承是oo语言中不可缺少的一部分,对于JavaScript也是如此.一般的继承有两种方式:其一,接口继承,只继承方法的签名:其二,实现继承,继承实际的方法 ...

  4. 【JS继承】JS继承之原型链继承

    自我介绍:大家好,我是吉帅振的网络日志:微信公众号:吉帅振的网络日志:前端开发工程师,工作4年,去过上海.北京,经历创业公司,进过大厂,现在郑州敲代码. JS继承专栏 1[JS继承]什么是JS继承? ...

  5. JavaScript 设计模式学习第五篇-继承与原型链

    JavaScript 是一种灵活的语言,兼容并包含面向对象风格.函数式风格等编程风格.我们知道面向对象风格有三大特性和六大原则,三大特性是封装.继承.多态,六大原则是单一职责原则(SRP).开放封闭原 ...

  6. JS中的继承与原型链

    对于原型我们通过[[prototype]].proto 以及 prototype 这三个概念理解其实现继承的思路. [[prototype]] 在 ECMAScript 标准中规定每个对象都有一个内置 ...

  7. 深入理解 js 之继承与原型链

    原型链与继承 当谈到继承时,JavaScript 只有一种结构:对象.每个实例对象(object )都有一个私有属性(称之为proto)指向它的原型对象(prototype).该原型对象也有一个自己的 ...

  8. 前端开发之闭包、继承、原型链

    闭包.原型链和继承 闭包 闭包的概念 官方对闭包的解释是:一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分. 闭包是指有权访问另一个函数作用域中的变量 ...

  9. 浅谈JavaScript继承与原型链

    对于使用过基于类的语言(如java或C++)的开发人员来说,JavaScript有点令人困惑,因为它是动态的,并且本身不提供一个class实现. 在(es5/es6)中引入class关键字,但那只是语 ...

最新文章

  1. hexde php_怎样在PHP中把16进制HEX数据转换为2进制数据呢?
  2. Qt 获取文件夹下所有文件
  3. 【超详细】遍历Windows进程模块
  4. ios html下拉刷新,Lottie_ios 实现下拉刷新
  5. php中对象的遍历输出,PHP中的对象遍历技巧
  6. 信息学奥赛一本通 1985:【19CSPJ普及组】加工零件 | 洛谷 P5663 [CSP-J2019] 加工零件
  7. mysql case when sum count_SQL语句为什么在这种case when情况下要用sum而不是count
  8. Nginx/Apache/Tomcat记录屏蔽真实IP
  9. 支持ipv6类型的ddos测试工具thc-ipv6
  10. (重读)JavaScript高级程序设计第四版
  11. stm32点击“go to definition of xxx”不跳转,出现browser的解决办法
  12. python和plc哪个难_学习PLC有前途吗?
  13. Android程序员英文介绍,安卓程序员面试英文自我介绍
  14. VMware Workstation中安装系统和VMware tools
  15. 处理任意类型链表模板
  16. 怎么修改图片到规定的大小?怎么改变图片KB大小?
  17. 优秀的人是如何通过互联网赚钱的,4个案例告诉你
  18. AMM引入无限网格策略,变无常损失为阿尔法收益
  19. 淮师计算机网络试题库,淮阴师范学院(淮师)计算机基础一至六章习题
  20. 支付设计白皮书:支付系统的路由系统设计

热门文章

  1. 获2017中国最佳创业投资机构百强,西高投二次创业实现超越
  2. 《开源框架那点事儿33》极限挑战:用一条循环语句正确输出99表!【前两名奖图书一本】...
  3. 高精度测量让交会对接更“温柔”
  4. redis超时原因排查
  5. 使用Event Message 对 Package 进行Troubleshoot
  6. 解决IDEA GIT密码输入错误后,报Authentication failed ... 不再弹出输入框,提交更新失败
  7. js使用base64 上传图片解决iOS手机竖屏拍摄图片发生旋转问题
  8. Redis手动failover
  9. ScrollView 里面嵌套 listview 使得listview只显示一行问题解决
  10. mybatis学习笔记(1)-对原生jdbc程序中的问题总结