【复习】javascript es6之前的继承(组合继承)

HarmonyOS应用实战开发-手写JS中的继承实现以及New、this、instanceof ES6 中提供的 class 和 extends 本质上只是语法糖,底层的实现原理依然是构造函数和寄生组合式继承继承对于JS来说就是父类拥有的方法和属性、静态方法等,子类也要拥有。子类中可以利用原型链查找,也可以在子类调用父类,或者从父类拷贝一份到子类等方案。寄生组合式继承是开发者使用比较多的,主要有三点:1.子类构造函数的proto指向父类构造器,继承父类的静态方法2.子类构造函数的prototype的__proto__指向父类构造器的prototype,继承父类的方法。 阅读详情

es6之前没有提供extends关键字用于类的继承,但是可以通过构造函数+原型对象模拟实现继承,被称为组合继承

组合继承分为两步:

  • 一是属性的继承,在构造函数中添加改变this指向的call()方法让父类的this指向子类
  • 二是方法的继承,将父类的实例赋值给子类的的原型对象(prototype),再将子类原型对象上的构造器(constructor)指回子类

 

属性继承示例

  Father.call(this,...)  在子类构造器中使用,使得父类的this指向子类

        // 属性继承:
		// 在子类调用父类函数,用call改变this指向
		function Father (uname, age) {
			this.uname = uname;
			this.age = age;
		}
		var o = new Father('张三丰', 22);
		//console.log(o);

		// 继承
		function Son (uname, age, score) {
			// this指向不同
			// Father(uname, age);
			// 如果调用Father函数,并且能够把Father里面的this指向儿子的实例对象
			Father.call(this, uname, age);
			this.score = score;
		}
		var obj = new Son('儿子', 19, 66);
		console.log(obj);

 

  方法继承示例

  将父类的实例赋值给子类的原型对象,这时候父类的实例开辟了新的内存空间,使得继承不会影响原来的父类原型对象,且父类实例拥有父类的方法,赋值过去后,子类拥有了父类的方法,实现继承后,需要将子类原型对象上的构造器(constructor)指回子类

        // 方法继承
		function Father () {}
		Father.prototype.say = function () {
			console.log('say方法');
		}

		// 继承
		function Son () {}
		// 如果继承下来父类的方法啦,那么要再子类的原型对象
		// 父实例对象赋值给子原型对象,指回构造函数本身
		Son.prototype = new Father();
		// Son.prototype.chi = function () {
		// 	console.log('吃饭');
		// }
        //子类原型对象上的构造器指回子类
		Son.prototype.constructor = Son;

		console.log( Son.prototype );
		//console.log( Father.prototype );
		
		
		var obj = new Son();
		//obj.say();
		//obj.chi();
		// console.log( obj );

 

 

ADS AEL脚本进阶:参数化电感与变压器的自动化设计 本文深入探讨了如何利用ADS AEL脚本实现电感与变压器的参数化与自动化设计。通过构建可复用的函数库、封装高级设计流程、集成DRC检查与性能预估,将繁琐的手动绘制升级为高效的智能设计引擎,并最终通过创建GUI工具降低使用门槛,大幅提升射频/微波电路设计效率。 阅读详情

相关推荐

从入门到精通:MATEKH743 飞控全解析——MAVLink 接口软/硬件对接实战

MATEKH743飞控是基于STM32H743微控制器的无人机核心控制系统,具备强大计算能力和丰富外设接口。该飞控采用双核架构,集成高性能IMU、气压计等传感器,支持多种开源固件(Betaflight/INAV/ArduPilot),适用于FPV穿越机、固定翼及工业无人机。相比PX4等飞控,MATEKH743在性价比和DIY友好度上优势明显,同时支持MAVLink协议实现设备通信。未来发展方向包括集成更高精度传感器、优化电源管理以及拓展工业应用场景,持续推动无人机技术创新。

bother3000的博客 2285

ES6继承

继承1.call()方法2.利用父构造函数继承属性3.利用原型对象继承方法 1.call()方法 ES6之前并没有提供extends继承,我们可以通过构造函数+原型对象模拟实现继承,被称为组合继承 call() 调用这个函数,并且修改函数运行时的this指向 fun.call(thisArg, arg1, arg2, …) thisArg为指向的对象,arg1,arg2…为参数 <script> function fn(x, y) { console.lo

katherin_wanzi的博客 442

病理WSI配准库valis教程

病理WSI配准库valis教程

azrealq的博客 2598

js:实现继承的几种方法(包括es6)

js的继承方式有很多,比如 一、借用构造函数继承(call,apply,bind) 1.介绍 利用call,apply,bind借用父类的构造函数 2.实现 function Animal (name) { this.name = name this.showName = function () { alert(name) } } function Cat () { // apply用...

分享前端开发工程师的一些日常生活、前端知识点、职业发展、对一些问题的看法、感悟等等 3717

基于Jeecgboot3.8.1的vue3版本前后端分离的flowable流程管理平台

基于Jeecgboot3.8.1的vue3版本前后端分离的flowable流程管理平台

宁波阿成的博客 1544

Android Camera驱动开发工程师面试指南:技术深度与实战准备

摘要:上海移远通信招聘Android Camera驱动开发工程师,主要负责Camera传感器驱动开发维护、高通/展锐平台底层开发及技术预研。岗位要求1年以上嵌入式开发经验,精通Camera传感器驱动调试,熟悉高通平台Camera架构及Android HAL框架。具备HAL开发、算法集成或车载/支付行业经验者优先。工作内容以Driver/HAL开发为主,需具备硬件接口评估能力。该职位接受Linux/单片机背景人员转型。

郑伟强dev的专栏 281

类的继承-ES5寄生继承与组合继承以及ES6继承方法

ES5没有类,所以函数即是类,习惯类的首字母大写基本类型:object、function、array、boolean、number、string(记忆:即6个基本数据类型,用function和array替换掉null、undefined)明确一点:ES5,1、实例(new)可以继承父类原型方法以及父类私有属性。2、寄生继承只做继承父类原型方法,不继承父类私有属性;3、组合继承即继承父类原型方法和继承父类私有属性。ES5继承从两方面讲:继承父类私有属性,继承父类原型方法最终目的:创建实例A继承Student.

qq_51758070的博客 629

YOLO26涨点改进 | 独家创新,细节涨点改进篇 | CVPR 2025顶会 | YOLO26引入Mona即插即用模块, 含MoCAA和DyTMona二次创新改进,含多种创新改进高效发论文

本文给大家介绍Mona即插即用模块, 含MoCAA和DyTMona二次创新模块优化YOLO26模型。YOLO26引入 Mona通过引入多尺度视觉友好型卷积滤波器(如3x3、5x5、7x7深度卷积)和可伸缩归一化层来优化适配器设计,以更好地处理视觉信号并调节输入特征分布。YOLO26引入Mona即插即用模块, 含MoCAA和DyTMona二次创新改进,含多种创新改进高效发论文。适合目标检测、图像分割、图像分类等所有CV任务通用即插即用模块。

Ai缝合怪、助力小伙伴高效发论文 242

JavaScript 继承(寄生组合式继承)

function prototypeInstance(superType) { function F(){} F.prototype = superType.prototype; return new F(); } function inheritPrototype(subType, superType) { var prototypeIns = prototy...

Sparkler123的博客 626

一次请求穿过的六道关卡:微服务基础组件的通信与IO、事件驱动、负载均衡、服务路由、API网关与配置协调

微服务的稳定性往往取决于看不见的基础组件。本文跟随一次下单请求,依次穿过API网关、服务路由、负载均衡与服务通信,再沿事件分支扇出,并从控制面审视配置中心。通信层剖析握手成本、连接复用、epoll与主从Reactor、心跳判活、退避抖动、截止时间与重试预算;事件层讲解编舞与编排、事务发件箱和幂等消费;均衡与路由对比静态与动态算法、路由链、全链路灰度与同区保底;网关讨论过滤器链与限流算法;配置部分给出四类配置、长轮询与共识协调,最后归纳五道防线。文中关键数据均来自可在Java8运行的演示程序。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 172万+

等保测评-达梦数据库

一般适用于等保测评

m0_54146694的博客 1299

类中两个属性具有相同名称bug

类中两个属性具有相同名称bug, 类中成员变量作用域应该为private。 com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions 类的两个属性具有相同名称 "name" this problem is related to the following location: at public java.util.List cn.excerci

我的博客 2138

CAPL通过lookupSignal和DBLookup获取DBC信号的属性信息

CAPL通过lookupSignal和DBLookup获取DBC信号的属性信息以及一些相关问题

天赐好车的博客 2890

JavaScript各种继承,原型继承,构造函数继承,组合继承,寄生组合,ES6继承,我能学会你也可以

本篇文章,是近期对于继承方面的一些学习感悟,一直以来对继承的理解比较浅显,所以下定决心要弄懂继承,终于通过几天潜心学习,有所收获,以此博文来记录总结,方便日后复习。文中不足之处,请各位老师指点。 借鉴了以下各位前辈的博客 https://blog.youkuaiyun.com/qq_32682137/article/details/82426401 http://www.fly63.com/article/...

不见浅诗的博客 1045

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

JS进阶知识、ES6基础知识整理

JS进阶知识、ES6基础知识整理一、JS面向对象面向过程编程POP(了解)面向对象编程OOP(了解)面向对象的特性面向过程和面向对象的对比二、ES6中的类和对象对象类 class创建类类添加方法三、类的继承继承super关键字三级目录四、面向对象案例案例:面向对象版tab栏切换三级目录五、构造函数和原型构造函数构造函数存在的问题构造函数的原型prototype对象原型_proto_constructor 构造函数构造函数、实例、原型对象三者之间的关系原型链JS的成员查找机制(规则)原型对象的this指向扩展

tuzi007a的博客 5806

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

ES5和ES6继承

ES5 ES6继承,构造函数继承,原型链,组合,寄生组合,类继承

m0_51658494的博客 2187

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【JS复习笔记】03 继承(从ES5到ES6)

前言 很久以前学习《Javascript语言精粹》时,写过一个关于js的系列学习笔记。 最近又跟别人讲什么原型和继承什么的,发现这些记忆有些模糊了,然后回头看自己这篇文章,觉得几年前的学习笔记真是简陋。 所以在这里将这篇继承重新更新一下,并且加上ES6的部分,以便下次又对这些记忆模糊了,能凭借这篇文章快速回忆起来。 本篇文章关于ES5的继承方面参考了《Javascript语言精粹》和《J...

ZQ13771472517的博客 332

ES5与ES6 的继承差异

先简单看看ES5中磨人的继承 ES5的继承有许多方式:大概分为 原型链继承,借用构造函数继承,组合继承,原型继承,寄生式继承,寄生组合式继承,我有博客专门详解过,我们这里就拉出一些经典的简单复习一下:有点迷的话请戳这里:js之清晰易懂讲继承(一) 原型链继承 // 定义父类 function Parent(name) { this.name = name; ...

yuanfangyoushan的博客 462

通过 20 个棘手的ES6面试问题来提高咱们的 JS 技能

作者:Alex 译者:前端小智 来源:dev.to 你知道的越多,你不知道的越多 点赞再看,养成习惯 本文 GitHub:https://github.com/qq449245884/xiaozhi 上已经收录,更多往期高赞文章的分类,也整理了很多我的文档,和教程资料。欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。 ECMAScript 6(以下简称ES...

粉丝们务必加入微信粉丝群 2996

js基础复习8-call方法简单使用以及javascript继承

首先回忆一下call方法的作用,它可以调用一个方法,并且第一个参数可以指定方法内部this的值: 我们来看一下结果: 我们发现第一次单独调用fn()的时候,this打印出来的是global,因为我们在node环境下运行的,在浏览器端运行代码这里this就指向window 第二次我们使用call方法调用fn的时候,由于我们在call方法的第一个参数那里传入了一个obj,所以fn()方法内部的this指向了这个obj,所以打印出来的this就是这个obj 我们看一下同样的代码在浏览器里是什么结果: cal

Hiroshi's 378

ES6总结 - 编写自用复习

1,var let const 三者区别; 使用var声明变量会使变量提升,且变量的值能被改变, 使用let声明变量不会变量提升,且变量的值能被改变,但是会产生块级作用域, 使用const声明变量不会变量提升,必须给变量赋值,且变量的值不能被改变, 2,set,map的区别; ...

wyj13525748183的博客 1879

ES6面试、复习干货知识点汇总

点击上方程序员成长指北,关注公众号回复1,加入高级Node交流群作者:StevenLikeWatermelon https://juejin.cn/post/68449037344644...

程序员成长指北 1297

这一次带你彻底搞懂JS继承

​ 前言 这段时间复习JS从看懂到看开(前端面试题整合)_DieHunter1024的博客-优快云博客时发现对继承概念又陌生了,平时大多用的都是extends,对底层知识难免会生疏,于是决定分享这篇文章,重新学习一下继承 起步 继承作为面向对象程序设计特征之一,必定有其重要的意义 继承是指:在已存在的类的基础上,拓展出新的类。那么存在的类就是父类,或基类,超类;新的类就是子类,或派生类 其重要意义就是使代码可以复用,子类中也拥有父类的属性和方法,从父类一级一级往下,属性和函数由泛化到细化

00后|互联网💻|办公室🍵茶农,希望通过技术改变生活|爱折腾💪|收集各类📚网络资源,好物不私藏,点点关注,不迷路。 全网搜:阿宇的编程之旅 or 阿宇的宝库 2624

JS继承

JS中的继承也是面试中常问的一块,常常是知其然而不知其所以然,看了视频后做一些笔记加深一下印象,以后好复习 继承 子类继承父类中的属性和方法:目的是让子类的实例能够调取父类的属性和方法 面向对象 封装:低耦合高内聚 多态:重载(方法名相同,形参个数或者类型不一样)与重写(在类的继承中,子类可以重写父类中的方法) public void sum(int n,int m){ } public void sum(int n,int m,float x){ } public void s

qq_43362199的博客 217

初学JavaScript:原型继承/盗用构造函数继承/组合继承/寄生式继承/原型式继承/寄生组合式继承

继承 简介 继承是面向对象编程中讨论最多的话题。很多面向对象语言都支持两种继承:接口继承和实现继承。 前者继承方法签名,后者继承实际的方法。接口继承在 ECMAScript 中是不可能的,因为函数没有签名。实现继承是ECMAScript 唯一支持的继承方式,而这主要是通过原型链实现的。 通过原型链实现继承的主要思想是:通过原型对象继承多个引用类型的属性和方法。 ====复习下构造函数、原型对象、实例对象的关系:每个构造函数都对应一个原型对象,通过protoType属性指向这个原型对象,这个原型对象中有一个

lalala_dxf的博客 1567

JS高级之ES6的类、ES5的构造函数和原型、继承

JavaScript高级01 1.面向过程与面向对象 1.1面向过程 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候再一个一个的依次调用就可以了。 1.2面向对象 面向对象是把事务分解成为一个个对象,然后由对象之间分工与合作。 1.3面向过程与面向对象对比 面向过程 面向对象 优点 性能比面向对象高,适合跟硬件联系很紧密的东西,例如单片机就采用的面向过程编程。 易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系

weixin_40581714的博客 411
上一篇: 【复习】call,apply,bind三个方法的异同
下一篇: 新闻移动端练习知识点记录
谭CV
博客等级 码龄9年 73粉丝 85原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值