JavaScript高级之继承
ES6之前并没有给我们提供 extends 继承。我们可以通过
构造函数+原型对象
模拟实现继承,被称为组合继承
。
2.1 call()
调用这个函数, 并且修改函数运行时的 this 指向
fun.call(thisArg, arg1, arg2, …)
- thisArg :当前调用函数 this 的指向对象
- 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 借用原型对象继承父类型方法
一般情况下,对象的方法都在构造函数的原型对象中设置,通过构造函数无法继承父类方法
。
核心原理:
- 将子类所共享的方法提取出来,让子类的 prototype 原型对象 = new 父类()
- 本质:子类原型对象等于是实例化父类,因为父类实例化之后另外开辟空间,就不会影响原来父类原型对象
- 将子类的 constructor 从新指向子类的构造函数
3. 类的本质
- class本质还是function.
- 类的所有方法都定义在类的prototype属性上
- 类创建的实例,里面也有__proto__ 指向类的prototype原型对象
4.所以ES6的类它的绝大部分功能,ES5都可以做到,新的class写法只是让对象原型的写法更加清晰、更像面向对象编程的语法而已。
5.所以ES6的类其实就是语法糖. - 语法糖:语法糖就是一种便捷写法. 简单理解, 有两种方法可以实现同样的功能, 但是一种写法更加清晰、方便,那么这个方法就是语法糖
JavaScript高级之继承相关推荐
- javascript高级知识点——继承
代码信息来自于http://ejohn.org/apps/learn/. 继承是如何工作的 function Person(){} function Ninja(){} Ninja.prototype ...
- JavaScript高级第2天:定义函数的三种方式、函数的原型链结构、完整原型链、作用域以及作用域链、函数的四种调用模式、闭包、计数器、斐波那契数列优化、三种继承方式
JavaScript高级第二天 01-定义函数的三种方式 1.函数声明 function:可以先调用再声明,因为预解析(把函数声明.变量声明进行提升) function fn() {//函数体conl ...
- 《JavaScript高级程序设计(第3版)》教程大纲
词条 <JavaScript高级程序设计>是2006年人民邮电出版社出版的图书,作者是(美)(Nicholas C.Zakas)扎卡斯.本书适合有一定编程经验的开发人员阅读,也可作为高校相 ...
- 前端红宝书《JavaScript高级程序设计》核心知识总结
此文是对<JavaScript 高级程序设计>一书难点的总结,也是笔者在看了 3 遍之后的一些梳理和感想,希望能借此巩固js的基础和对一些核心概念有更深入的了解. 摘要 JS基本的数据类型 ...
- 《JavaScript高级程序设计》(第2版)上市
本书是技术畅销书<JavaScript高级程序设计> 的第2版,几乎全部更新.重写 了上一版的内容,融入了作者近几年来奋战在前端开发一线的宝贵经验 , 是学习和提高JavaScript ...
- 《javascript高级程序设计》笔记:内存与执行环境
上一篇:<javascript高级程序设计>笔记:继承 近几篇博客都会围绕着图中的知识点展开 由于javascript是一门具有自动垃圾收集机制的编程语言,开发者不必担心内存的分配和回收的 ...
- 【读书笔记】JavaScript高级编程(二)
2019独角兽企业重金招聘Python工程师标准>>> 书中第3章 基本概念摘要(一) 3.3 变量 使用var操作符定义的变量将成为定义该变量的作用域中的局部变量.也就是说,如果在 ...
- 《javascript高级程序设计》笔记:原型图解
文章直接从原型图解开始的,如果对一些概念不太清除,可以结合后面几节查看 1. 图解原型链 1.1 "铁三角关系"(重点) function Person() {}; var p = ...
- javascript高级程序设计pdf_一个老牌程序员推荐的JavaScript的书籍,看了真的不后悔!...
很多人问我怎么学前端?我的回答是:读书吧!相对于在网上学习,在项目中学习和跟着有经验的同事学习,书中有着相对完整的知识体系,每读一本好书都会带来一次全面的提高.而如果深一脚浅一脚的学习,写出代码的质量 ...
最新文章
- linux+Qt 下利用D-Bus进行进程间高效通信的三种方式
- 腾讯推出高性能 RPC 开发框架
- PL/SQL Developer中如何格式化SQL
- android 面试汇总二
- caffe各种依赖包配置
- 在webstorm中使用Jade for Meteor,模板template语法“+templateName”不能使用的解决方案...
- 金数据一个不错的调查平台
- 1090 Highest Price in Supply Chain (25 分)(模拟建树,找树的深度)牛客网过,pat没过...
- php的前端环境,PHP中的环境变量
- Android的Context 安卓常用系统服务(当前运行包名/当前网络状态和开关网络/音频服务)...
- linux下怎么卸载mysql数据库_linux 怎么完全卸载mysql数据库
- 三相短路电流计算机算法的原理什么,第三章电力系统三相短路电流及实用计算.ppt...
- 桌面计算机怎么显示桌面快捷方式,桌面快捷方式不见了,小编教你桌面快捷方式不见了怎么找回...
- 阿里云OSS上传图片、PDF设置链接预览
- notepad++一键删除重复行
- 【转】开放性金融中的超流动性抵押链
- wordpress文章自动同步天涯博客插件wp2Tianya发布
- CVPR-2021 | RepVGG:极简架构,SOTA性能,让VGG式模型再次伟大
- Python Socket 编程详细介绍
- HFSS 3D LAOUT PCB 裁剪,差分线,过孔仿真和优化
热门文章
- Django REST framework 源码解析
- html如何设置滑轮效果,HTML中鼠标滚轮事件onmousewheel处理
- 【深度学习】Tensorflow完成线性回归对比机器学习LinearRegression()
- SQLAlchemy中filter_by()和filter()的用法不同
- 玩Linux碰到的问题以及使用技巧总结
- canny算子的理论分析
- python ansys workbench联动_联合ANSYS WORKBENCH和经典界面进行后处理
- uboot移植——DM9000的移植
- python 分布图_python数据分布型图表柱形分布图系列带误差线的柱形图
- 8-[函数]-嵌套函数,匿名函数,高阶函数