ES6之前并没有给我们提供 extends 继承。我们可以通过构造函数+原型对象模拟实现继承,被称为组合继承

2.1 call()

调用这个函数, 并且修改函数运行时的 this 指向

fun.call(thisArg, arg1, arg2, …)

  1. thisArg :当前调用函数 this 的指向对象
  2. arg1,arg2:传递的其他参数

2.2 借用构造函数继承父类型属性

核心原理: 通过 call() 把父类型的 this 指向子类型的 this ,这样就可以实现子类型继承父类型的属性

 // 父类function Person(name, age, sex) {this.name = name;this.age = age;this.sex = sex;}// 子类function Student(name, age, sex, score) {Person.call(this, name, age, sex);  // 此时父类的 this 指向子类的 this,同时调用这个函数this.score = score;}var s1 = new Student('zs', 18, '男', 100);console.dir(s1);

2.3 借用原型对象继承父类型方法

一般情况下,对象的方法都在构造函数的原型对象中设置,通过构造函数无法继承父类方法

核心原理:

  1. 将子类所共享的方法提取出来,让子类的 prototype 原型对象 = new 父类()
  2. 本质:子类原型对象等于是实例化父类,因为父类实例化之后另外开辟空间,就不会影响原来父类原型对象
  3. 将子类的 constructor 从新指向子类的构造函数



3. 类的本质

  1. class本质还是function.
  2. 类的所有方法都定义在类的prototype属性上
  3. 类创建的实例,里面也有__proto__ 指向类的prototype原型对象
    4.所以ES6的类它的绝大部分功能,ES5都可以做到,新的class写法只是让对象原型的写法更加清晰、更像面向对象编程的语法而已。
    5.所以ES6的类其实就是语法糖.
  4. 语法糖:语法糖就是一种便捷写法. 简单理解, 有两种方法可以实现同样的功能, 但是一种写法更加清晰、方便,那么这个方法就是语法糖

JavaScript高级之继承相关推荐

  1. javascript高级知识点——继承

    代码信息来自于http://ejohn.org/apps/learn/. 继承是如何工作的 function Person(){} function Ninja(){} Ninja.prototype ...

  2. JavaScript高级第2天:定义函数的三种方式、函数的原型链结构、完整原型链、作用域以及作用域链、函数的四种调用模式、闭包、计数器、斐波那契数列优化、三种继承方式

    JavaScript高级第二天 01-定义函数的三种方式 1.函数声明 function:可以先调用再声明,因为预解析(把函数声明.变量声明进行提升) function fn() {//函数体conl ...

  3. 《JavaScript高级程序设计(第3版)》教程大纲

    词条 <JavaScript高级程序设计>是2006年人民邮电出版社出版的图书,作者是(美)(Nicholas C.Zakas)扎卡斯.本书适合有一定编程经验的开发人员阅读,也可作为高校相 ...

  4. 前端红宝书《JavaScript高级程序设计》核心知识总结

    此文是对<JavaScript 高级程序设计>一书难点的总结,也是笔者在看了 3 遍之后的一些梳理和感想,希望能借此巩固js的基础和对一些核心概念有更深入的了解. 摘要 JS基本的数据类型 ...

  5. 《JavaScript高级程序设计》(第2版)上市

      本书是技术畅销书<JavaScript高级程序设计> 的第2版,几乎全部更新.重写 了上一版的内容,融入了作者近几年来奋战在前端开发一线的宝贵经验 , 是学习和提高JavaScript ...

  6. 《javascript高级程序设计》笔记:内存与执行环境

    上一篇:<javascript高级程序设计>笔记:继承 近几篇博客都会围绕着图中的知识点展开 由于javascript是一门具有自动垃圾收集机制的编程语言,开发者不必担心内存的分配和回收的 ...

  7. 【读书笔记】JavaScript高级编程(二)

    2019独角兽企业重金招聘Python工程师标准>>> 书中第3章 基本概念摘要(一) 3.3 变量 使用var操作符定义的变量将成为定义该变量的作用域中的局部变量.也就是说,如果在 ...

  8. 《javascript高级程序设计》笔记:原型图解

    文章直接从原型图解开始的,如果对一些概念不太清除,可以结合后面几节查看 1. 图解原型链 1.1 "铁三角关系"(重点) function Person() {}; var p = ...

  9. javascript高级程序设计pdf_一个老牌程序员推荐的JavaScript的书籍,看了真的不后悔!...

    很多人问我怎么学前端?我的回答是:读书吧!相对于在网上学习,在项目中学习和跟着有经验的同事学习,书中有着相对完整的知识体系,每读一本好书都会带来一次全面的提高.而如果深一脚浅一脚的学习,写出代码的质量 ...

最新文章

  1. linux+Qt 下利用D-Bus进行进程间高效通信的三种方式
  2. 腾讯推出高性能 RPC 开发框架
  3. PL/SQL Developer中如何格式化SQL
  4. android 面试汇总二
  5. caffe各种依赖包配置
  6. 在webstorm中使用Jade for Meteor,模板template语法“+templateName”不能使用的解决方案...
  7. 金数据一个不错的调查平台
  8. 1090 Highest Price in Supply Chain (25 分)(模拟建树,找树的深度)牛客网过,pat没过...
  9. php的前端环境,PHP中的环境变量
  10. Android的Context 安卓常用系统服务(当前运行包名/当前网络状态和开关网络/音频服务)...
  11. linux下怎么卸载mysql数据库_linux 怎么完全卸载mysql数据库
  12. 三相短路电流计算机算法的原理什么,第三章电力系统三相短路电流及实用计算.ppt...
  13. 桌面计算机怎么显示桌面快捷方式,桌面快捷方式不见了,小编教你桌面快捷方式不见了怎么找回...
  14. 阿里云OSS上传图片、PDF设置链接预览
  15. notepad++一键删除重复行
  16. 【转】开放性金融中的超流动性抵押链
  17. wordpress文章自动同步天涯博客插件wp2Tianya发布
  18. CVPR-2021 | RepVGG:极简架构,SOTA性能,让VGG式模型再次伟大
  19. Python Socket 编程详细介绍
  20. HFSS 3D LAOUT PCB 裁剪,差分线,过孔仿真和优化

热门文章

  1. Django REST framework 源码解析
  2. html如何设置滑轮效果,HTML中鼠标滚轮事件onmousewheel处理
  3. 【深度学习】Tensorflow完成线性回归对比机器学习LinearRegression()
  4. SQLAlchemy中filter_by()和filter()的用法不同
  5. 玩Linux碰到的问题以及使用技巧总结
  6. canny算子的理论分析
  7. python ansys workbench联动_联合ANSYS WORKBENCH和经典界面进行后处理
  8. uboot移植——DM9000的移植
  9. python 分布图_python数据分布型图表柱形分布图系列带误差线的柱形图
  10. 8-[函数]-嵌套函数,匿名函数,高阶函数