JavaScript实现继承的几种方式

在这篇文章中,介绍了原型链继承的情形,事实上,JavaScript虽没有给出继承的关键字,但是我们依然能够拿出一些好办法实现。

 

1、原型链继承:

			var Base = function()
			{
				this.level = 1;
				this.name = "base";
				this.toString = function(){
					return "base";
				};
			};
			Base.CONSTANT = "constant";
			
			var Sub = function()
			{
			};
			Sub.prototype = new Base();
			Sub.prototype.name = "sub";

 

优点:从instanceof关键字来看,实例既是父类的实例,又是子类的实例,看起来似乎是最纯粹的继承。

缺点:子类区别于父类的属性和方法,必须在Sub.prototype = new Base();这样的语句之后分别执行,无法被包装到Sub这个构造器里面去。例如:Sub.prototype.name = "sub";无法实现多重继承。

 

 

2、构造继承:

			var Base = function()
			{
				this.level = 1;
				this.name = "base";
				this.toString = function(){
					return "base";
				};
			};
			Base.CONSTANT = "constant";
			
			var Sub = function()
			{
				Base.call(this);
				this.name = "sub";
			};

优点:可以实现多重继承,可以把子类特有的属性设置放在构造器内部。

缺点:使用instanceof发现,对象不是父类的实例。

 

 

3、实例继承:

			var Base = function()
			{
				this.level = 1;
				this.name = "base";
				this.toString = function(){
					return "base";
				};
			};
			Base.CONSTANT = "constant";
			
			var Sub = function()
			{
				var instance = new Base();
				instance.name = "sub";
				return instance;
			};

优点:是父类的对象,并且使用new构造对象和不使用new构造对象,都可以获得相同的效果。

缺点:生成的对象实质仅仅是父类的实例,并非子类的对象;不支持多继承。

 

 

4、拷贝继承:

			var Base = function()
			{
				this.level = 1;
				this.name = "base";
				this.toString = function(){
					return "base";
				};
			};
			Base.CONSTANT = "constant";
			
			var Sub = function()
			{
				var base = new Base();
				for(var i in base)
					Sub.prototype[i] = base[i];
				Sub.prototype["name"] = "sub";
			};

优点:支持多继承。

缺点:效率较低;无法获取父类不可枚举的方法。

 

 

这几种形式各有特点,仅就我提供的代码而言,满足下面的表格:

 

instanceof父类instanceof子类子类constructor不可枚举方法的继承多继承可实现
原型链继承TRUETRUEFALSETRUEFALSE
构造继承FALSETRUETRUETRUETRUE
实例继承TRUEFALSEFALSETRUEFALSE
拷贝继承FALSETRUETRUEFALSETRUE

 

---------------------------------------------------------------------------------------------------------------------------

 

2012-1-10:补充,如果我们不需要类继承,只需要对象继承,对于支持 ECMAScript 5 的浏览器来说,还可以用Object.create方法来实现:

			var Base = function()
			{
				this.level = 1;
				this.name = "base";
				this.toString = function(){
					return "base";
				};
			};
			Base.CONSTANT = "constant";
			
			var sub = Object.create(new Base());
			sub.name = "sub";

 

文章系本人原创,转载请注明出处和作者

高通SDX35:SGMII接口PHY RTL8211FSI-CG驱动适配 高通SDX35 RTL8211F SGMII 阅读详情

相关推荐

SAP Parallel Accounting(平行分类账业务)配置及操作手册【适用于多国家会计准则】

在SAP系统中,分类账(Ledger)是用于会计核算的核心概念,它允许企业根据不同的会计原则和货币进行财务记录。定义分类账是配置平行账(Parallel Accounting)的第一步。分类账的创建:通过事务代码OX18可以创建新的分类账。通常,一个SAP系统会有一个主分类账(如0L),它代表法定会计和实时传输至管理会计(CO)的账本。分类账属性:在创建分类账时,需要定义其属性,如会计年度变式、货币、会计原则等。这些属性将决定分类账的核算规则和适用性。

数字化2025 4618

JavaScript中的继承

需要根据具体的需求和情况来选择适合的继承方式,构造函数继承在某些场景下可能更适合,特别是需要独立的属性和方法,并且需要传递参数或实现多继承的情况。结合了原型链继承和构造函数继承的优点:通过原型链继承,可以实现属性和方法的复用;需要根据具体的需求和情况来选择适合的继承方式,组合继承在大多数情况下是一种常用且灵活的继承模式,能够较好地解决原型链继承和构造函数继承的问题。子类与父类的原型链相互独立:子类对象的原型既包含父类构造函数的原型,也包含子类特有的属性和方法,可以实现对父类原型上方法的重写和扩展。

qq_45941368的博客 639

保姆级教程:用QSTEM和DrProbe搞定你的第一张STEM模拟图(附Fe3O4实例文件)

本文提供了一份详细的STEM模拟图像生成教程,涵盖从晶体结构获取到最终图像模拟的全过程。通过QSTEM和DrProbe软件的操作指南,帮助材料科学研究者快速掌握STEM模拟技术,特别适合初学者。教程包含Fe3O4实例文件,详细解析参数设置、计算优化和结果分析等关键步骤。

weixin_33730836的博客 524

JavaScript继承

寄生组合继承存在效率问题,最主要的效率问题是父类构造函数始终被调用两次,一次是在创建子类原型时调用,另一次是在子类构造函数中调用,本质上,子类原型最终是要包含超类对象的所有实例属性,子类构造函数只要在执行的时候重写自己的原型就可以了。把子类的原型对象指向父类,就能使用父类中的方法和属性了。采用原型式继承不自定义类型,临时创建一个构造函数,借助已有的对象作为临时构造函数的原型,然后在此基础实例化对象,并返回。继承就是指一个子类继承父类的属性和方法,使得子类对象(实例化对象)具有父类的方法和属性。

m0_61480985的博客 1988

15. GD32E230定时器实战:基于TIMER5的1秒LED闪烁中断配置详解

本文详细讲解了如何在GD32E230微控制器上配置TIMER5定时器,实现精准的1秒LED闪烁中断。内容涵盖从时钟开启、参数计算、中断设置到服务函数编写的完整流程,重点解析了预分频值与周期值的配置方法,帮助开发者掌握硬件定时器的核心应用。

weixin_29092787的博客 135

YOLOV8主干改进方法:C2f-Dual——DualConv轻量化双卷积设计(附改进代码)

DualConv是一种创新的卷积网络结构,旨在构建轻量级的深度神经网络。它通过结合3×3和1×1的卷积核处理相同的输入特征映射通道,优化了信息处理和特征提取。DualConv利用组卷积技术高效排列卷积滤波器,大大降低了计算成本和参数数量。

m0_74890428的博客 4701

JS中的八种继承方法

详细讲解js中的八种继承方法,原型链继承、构造函数继承(经典继承)、组合面试、原型式继承、Object.create()、寄生式继承、寄生组合式继承、ES6类继承

weixin_70134200的博客 6646

STM32异常与中断过程详解

1. 异常与中断概念引入 异常主要是指来自CPU内部的意外事件,比如执行了未定义指令、算术溢出、除零运算等发生在CPU内部的意外事件,这些异常的发生,会引起CPU运行相应的异常处理程序;中断一般来自硬件(如片上外设、外部I/O输入等)发生的事件,当这些硬件产生中断信号时,CPU会暂停当前运行的程序,转而去处理相关硬件的中断服务程序。但无论是异常还是中断,都会引起程序执行偏离正常的流程,转而去执行异常/中断的处理函数。 下面对异常和中断的介绍,如果中断信号的产生原因来自CPU内部,则称之为异常;如果中断信号来

luobeihai的博客 1万+

JavaScript如何实现继承?

由于通过原型链层层遍历可能带来性能问题,当试图访问不存在的属性时,会遍历整个原型链。在原型链上查找比较耗时,对性能有副作用,这在性能要求苛刻的情况下很重要。因此,我们在设计对象的时候,要注意原型链的长度。除了通过原型链的方式实现JavaScript的继承,JavaScript中实现继承的方式还有:其中,原型链继承方式中引用类型的属性被所有实例共享,无法做到实例私有;经典继承方式可以实现实例属性私有,但要求类型只能通过构造函数来定义虽然继承的方式有很多种,但实际上都离不开原型对象与原型链的内容。

pakerder的博客 1598

月薪30k+的工业视觉,必备Java+YOLO技能(工业级落地全拆解)

30k+工业视觉岗的核心不是算法调参,而是用Java把YOLO落地到工业场景的能力——稳运行、能对接、可管理是高薪的核心壁垒;必备技能分五层:模型工业级适配、Java推理核心、SpringBoot后端、工业部署运维、场景适配,每层都要练到“能落地、能讲清、能避坑”;学习路径的核心是“实战驱动”:不要只学理论,从一个完整的工业项目(如锂电缺陷检测)入手,练完就能对标高薪岗。

2601_94871597的博客 525

Juniper SRX PPPoE配置

set interfaces pp0 unit 1 ppp-options chap default-chap-secret 拨号用户名密码。set interfaces pp0 unit 0 ppp-options chap default-chap-secret 拨号密码。set interfaces pp0 unit 0 ppp-options chap local-name 拨号用户名。6号口接运营商进行拨号。

Jian Sun_的博客 750

js常见的六种继承方式

然后,createObject函数通过增强新对象的方式,在新对象上添加了sayName方法,从而实现继承和增强。然后,将子类的原型设置为临时构造函数的实例,从而实现了对父类原型的继承。寄生组合式继承是指通过借用构造函数来继承实例属性,然后通过将原型设置为一个继承父类原型的实例来继承父类原型上的属性和方法。这种方式的缺点是所有新对象的实例属性都会共享obj对象的属性,导致无法实现真正意义上的继承。原型式继承是指通过使用一个已有的对象作为新对象的原型来创建新对象,从而实现继承。,从而创建了一个新的对象,并将。

weixin_46369590的博客 1252

手把手教你学Simulink——基于Simulink的固态变压器(SST)多级协同控制

摘要:本文详细介绍了基于Simulink的固态变压器(SST)多级协同控制方法。SST作为新一代智能电网核心设备,通过AC-DC整流、DC-DC隔离和DC-AC逆变三级架构实现电能高效转换。针对多级耦合难题,提出能量-功率协同控制策略:纵向解耦电压环与功率前馈,横向联动级间功率指令。在Simulink中搭建10kV/400V系统模型,实现直流母线电压波动<2%的动态性能。特别设计了负载突变时的三级协同机制,通过虚拟惯性算法和前馈控制实现快速响应。文章包含完整的建模步骤、控制推导和参数设置,为电力电子工

MHD0815的博客 195

js继承的几种实现方式

js有几种经典的继承方式。比如原型链继承、构造函数继承、组合继承、寄生组合继承、ES6继承。让我们一一分析并实现。同时了解每种方案的优缺点。 文章目录1.原型链继承优点缺点2.构造函数继承优点缺点3.组合继承优点缺点4.寄生组合继承优点缺点5.ES6继承 其实js的继承本质上是通过原型链机制实现的扩展。不管是哪种继承方式,都是通过操作父类原型链和子类原型链形成关联关系实现的。只是不同实现中需要考虑不同的问题。在实际项目开发中,建议尽可能使用ES6的class extends实现。其他实现方式主要是理解背后的

A-Select ° 3130

Statistics and Machine Learning Toolbox

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

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

js在html有几种存在方式,javascript实现继承有几种方式?

javascript实现继承的方式有哪些?下面本篇文章就来给大家介绍一下javascript实现继承的几种方式,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。实现继承的方式一:原型链实现方法:A原型的实例是B原型的属性不要忘记原型链中默认存在Object子类添加方法或重写超类方法要放在替换原型语句之后通过原型链实现继承后,不能使用对象字面量的方式创建方法和属性,因为会重写原型链通过...

weixin_32224199的博客 126

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

在JavaScript中实现继承的几种方式

文章目录前言继承的几种方式构造方式继承进行测试结论修改原型继承进行测试结论(构造函数+修改原型)组合继承进行测试结论基于组合继承的优化测试结论总结 前言 JavaScript作为一门面向对象语言,自然有封装、继承、多态的特性,在其他面向对象语言中(如Java、python等),通过类来实现继承,而JavaScript中没有类的概念,于是JavaScript的继承方式区别于传统的继承方式,且有多种实现 继承的几种方式 以下为JavaScript中常见实现继承的方式,不代表全部。 构造方式继承 functi

weixin_44786791的博客 1512

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

JavaScript(JS) 中实现继承的几种方式

将父类的实例作为子类的原型,他的特点是实例是子类的实例也是父类的实例,父类新增的原型方法/属性,子类都能够访问,并且原型链继承简单易于实现,缺点是来自原型对象的所有属性被所有实例共享,无法实现多继承,无法向父类构造函数传参。为父类实例添加新特性,作为子类实例返回,实例继承的特点是不限制调用方法,不管是 new 子类()还是子类()返回的对象具有相同的效果,缺点是实例是父类的实例,不是子类的实例,不支持多继承。通过调用父类构造,继承父类的属性并保留传参的优点,然后通过将父类实例作为子类原型,实现函数复用。

Yongqiang Chen的博客 636

JavaScript(js)实现继承的几种方式

1.原型链继承 核心:将父类的实例做为子类的原型对象 //动物类 function Animal(name,sex) { this.name = name || 'Animal'; this.sex = sex || '未知'; this.sleep = function () { console.log(this.name + "在睡觉!"); } } //添加原型属性和方法 Anima

weixin_47863547的博客 432

简单了解一下js实现继承的几种方式

js实现继承 文章目录js实现继承1.==原型继承==(B.prototype=new A)把A的实例赋值给B的原型,那么通过B创建的实例,可以调用(继承)A的实例的私有属性和公有属性;这种继承方式就是原型继承原型继承 继承了私有属性和公有属性2 ==call继承==3 ==中间类继承==4 ==寄生组合继承== 1.原型继承(B.prototype=new A) 把A的实例赋值给B的原型,那么通...

weixin_44592971的博客 303

JS 实现继承的几种方式

继承作为面向对象语言的三大特性之一,可以在不影响父类对象实现的情况下,使得子类对象具有父类对象的特性;同时还能再不影响父类对象行为的情况下扩展子类对象独有的特性,为编码带来了极大的便利。 下面我们就来看看 JavaScript 中都有哪些实现继承的方法。 原型链继承 原型链继承是比较常见的继承方式之一,其中涉及的构造函数、原型和实例,三者之间存在着一定的关系,即每一个构造函数都有一个原型对象,原型对象又包含一个指向构造函数的指针,而实例则包含一个原型对象的指针。 原型链继承的主要思想是:重写子类的pr.

weixin_54777359的博客 226

JavaScript 之 实现继承的几种方式

总结了js实现继承的主要方式,并做了较为详细的分析与对比,希望对新手的理解有所帮助。

Leo_Franklin的博客 654

JavaScript实现继承的几种方式总结

虽然在ES6中有了继承,使用extends关键字就能实现。本篇讲的不是这种,而是ES6之前的几种实现继承的方式。 (一)原型链 ECMAScript中将原型链作为实现继承的主要方法。其基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法。(不理解原型链的童鞋们可以翻阅一下我之前的博客,里面有详细的说明) 实现原型链的一种基本模式 function SuperType(){ t...

qq_33699819的博客 199

JavaScript实现继承的几种方式详解(代码可本地运行便于理解)

JavaScript实现继承的几种方式 1.原型链继承 2.利用函数对象call和apply实现继承(call和apply只是传参格式上有区别) 3.混合继承(call、apply和原型继承混合) 4.ES6 Class关键字继承

小猿同学628的博客 312

js实现继承的几种方式

js实现继承的几种方式_徕胖的博客-优快云博客_js继承

qq_45633169的博客 1584
上一篇: 青蛙跳台阶问题的三种解法
下一篇: 写在职业生涯的路口
RayChase
博客等级 码龄20年 71粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值