JavaScript 实现继承

JavaScript 中的继承可以通过以下几种方式来实现:

1、原型链继承:通过将子类的原型对象指向父类的实例来实现继承。这种方式的优点是实现简单,缺点是父类的私有属性和方法子类是不能访问的。

function Parent() {
  this.name = 'parent';
  this.age = 30;
}
Parent.prototype.sayName = function() {
  console.log(this.name);
}

function Child() {
  Parent.call(this);
}
Child.prototype = new Parent();
Child.prototype.constructor = Child;

2、借用构造函数继承:通过在子类的构造函数中调用父类的构造函数来实现继承。这种方式的优点是子类可以访问父类的私有属性和方法,缺点是每个子类实例都会有一份父类实例的拷贝。

function Parent() {
  this.name = 'parent';
  this.age = 30;
}
Parent.prototype.sayName = function() {
  console.log(this.name);
}

function Child() {
  Parent.call(this);
}

3、组合继承:通过结合原型链继承和借用构造函数继承的优点来实现继承。这种方式的优点是既可以访问父类的私有属性和方法,又可以避免每个子类实例都有一份父类实例的拷贝。

function Parent() {
  this.name = 'parent';
  this.age = 30;
}
Parent.prototype.sayName = function() {
  console.log(this.name);
}

function Child() {
  Parent.call(this);
}
Child.prototype = Object.create(Parent.prototype);
Child.prototype.constructor = Child;

4、ES6 Class继承:通过使用ES6 class语法来实现继承。

class Parent {
  constructor() {
    this.name = 'parent';
    this.age = 30;
  }
  sayName() {
    console.log(this.name);
  }
}

class Child extends Parent {
  constructor() {
    super();
  }
}

JavaScript 中的继承可以通过多种方式来实现,如原型链继承、借用构造函数继承、组合继承、ES6 Class继承等。每种方式都有各自的优缺点,需要根据具体需求来选择使用。

另外,对于JavaScript中的继承,还有一些需要注意的点:

  • 在原型链继承和组合继承中,子类的原型对象会继承父类的原型对象,这意味着子类和父类共享同一个原型对象,如果父类原型对象上的属性和方法发生改变,子类也会受到影响。
  • 在借用构造函数继承和组合继承中,子类的实例会有一份父类实例的拷贝,这意味着每个子类实例都有自己的父类实例,不会受到其他实例的影响。
  • 在ES6 Class继承中,父类的静态方法和属性会被继承到子类,子类的实例也会继承父类的实例方法和属性。

选择合适的继承方式和组合使用,可以帮助我们更好的组织代码,提高代码的可维护性。

作者:yuzhihui
出处:http://www.cnblogs.com/yuzhihui/ 声明:欢迎任何形式的转载,但请务必注明出处!!!
本文转载于网络 如有侵权请联系删除

相关文章

  • laravel post提交数据时显示异常

    post提交数据时候显示如下:Thepagehasexpiredduetoinactivity. Pleaserefreshandtryagain复制这是由于在laravel框架中有此要求:任何指向web中POST,PUT或DELETE路由的HTML表单请求都应该包含一个CSRF令牌,否则,这个请求将会被拒绝。eg:<formmethod="POST"action="/profile"> { {csrf_field()}} ... </form>复制发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/113211.html原文链接:https://javaforall.cn

  • 新秀学习Hibernate——一个简单的例子

    大家好,又见面了,我是全栈君。一个、Hibernate开发。上篇博客已经为大家介绍了持久层框架的发展流程,持久层框架的种类。为了可以使用Hibernate高速上手,我们先解说一个简单的Hibernate应用实例hibernate_first。二、开发流程。 1.首先在MyEclipce中新建一个hibernate_first的项目,然后新建后的项目文件夹为:2.配置Hibernate环境。3.编写持久化类User.javapackagecom.bjpowernode.hibernate; importjava.util.Date; publicclassUser{ privateStringid; privateStringname; privateStringpassword; privateDatecreateTime; privateDateexpireTime; publicStringgetId(){ returnid; } publicvoidsetId(Stringid){ this.id=id; } publicS

  • AAAI 2020 | CORE:利用复制和改进策略自动优化分子

    作者|庞超 编辑|戴迟迟 校对|李仲深 分子优化是在输入分子X的基础上产生具有更理想性质的分子Y。目前最先进的方法是将分子划分成一组大的子结构集S,并通过迭代预测从S中选择子结构添加来产生新的分子结构。然而,由于可用子结构S集很大,这样的迭代预测任务往往是不准确的,特别是对于训练数据中不常见的子结构。 为了应对这一挑战,作者提出了一种新的生成策略,称为“Copy&Refine”(CORE),在此方法中,生成器首先决定是从输入X复制现有的子结构还是生成新的子结构,然后将最优的子结构添加到新分子中。与骨架树生成和对抗性训练相结合,CORE可以在药物相似性(QED)、多巴胺受体(DRD2)和惩罚LogP等多种测试中显著改进几种最新的分子优化方法。一、研究背景近年来,通过直接生成分子图,人们提出了绕过生成SMILES字符串的方法。这些基于图的方法将分子生成任务重新定义为图到图的转换问题,从而避免了生成SMILES字符串的需要。此方法的关键策略是将输入分子图划分为一个由子结构(如环、原子和键)组成的骨架树,并学会生成这样的树。所有可能的树节点都指向大量的子结构。然而,图生成方法仍然表现出

  • OLED显示屏

    前言 目前单片机、机器人或者嵌入式常用的就是LCD或者OLED屏,在前面的一篇文章里已经详细的介绍了LCD1602,在以下内容里我会详细介绍一下。普遍来说,OLED显示屏的使用会比LCD显示屏麻烦一些,所以我在介绍LCD1602的时候使用用51单片机,而在这篇介绍OLED显示屏里会用STM32。一、介绍基本简介OLED(OrganicLight-EmittingDiode,又称有机电激发光显示、有机发光半导体)是有机发光二极管的英文缩写。其是一种利用多层有机薄膜结构产生电致发光的器件,它很容易制作,只需要低的驱动电压,这些特征使得OLED在满足平面显示器的应用上显得非常突出。OLED显示屏比LCD更轻薄、亮度高、功耗低、响应快、清晰度高、柔性好、发光效率高。单色屏幕的像素是一个像素就是一个发光二极管。OLED是”自发光”,像素本身就是光源,所以对比度极高,显示效果很犀利,绝无朦朦胧胧、拖泥带水之感,深受爱好者追捧,可惜当前技术所限制,无法大尺寸化,价格比TFT液晶屏高得多。几种原理图外形二、使用实战准备硬件准备STM32F103RCT6核心板0.96OLED显示屏杜邦线软件准备Keil

  • 巧用CSS属性值正则匹配选择器

    属性值正则匹配选择器包括下面3种:[attr^=”val”][attr$=”val”][attr*=”val”]这3种属性选择器是字符匹配,而非单词匹配。其中,尖角符号^、美元符号$以及星号*都是正则表达式中的特殊标识符,分别表示前匹配、后匹配和任意匹配。利用这些选择器,纯CSS就可以做出很炫酷的功能。 显示超链接的小图标和文件类型图表利用[attr^="val"]前匹配选择器可以判断<a>元素的链接地址类型,以用来显示对应的小图标。显示超链接的小图标的样式如下:[href]{padding-left:18px;} /*链接地址*/ [href^="https"], [href^="//"]{ background:url("./images/link.png")no-repeatleft; } /*网页内锚链*/ [href^="#"]{ background:url("./images/anchor.png")no-repeatleft; } /*手机

  • One_Hot总结

    前言:平时做项目只知道One_Hot编码作用,并不知道原因,今天在用到pandas.get_dummies()时,发现其实它OneHotEncoder封装所以在进行相应编码时有俩种方式:pandas.get_dummies()(pandas库中)OneHotEncoder()(sklearn库中)离散特征的编码处理分为两种情况:1、离散特征的取值之间没有大小的意义,比如color:[red,blue],那么就使用one-hot编码2、离散特征的取值有大小的意义,比如size:[X,XL,XXL],那么就使用数值的映射{X:1,XL:2,XXL:3}为什么使用one-hot编码来处理离散型特征?————————————————————————————在回归,分类,聚类等机器学习算法中,特征之间距离的计算或相似度的计算是非常重要的,而我们常用的距离或相似度的计算都是在欧式空间的相似度计算,计算余弦相似性,基于的就是欧式空间。 而我们使用one-hot编码,将离散特征的取值扩展到了欧式空间,离散特征的某个取值就对应欧式空间的某个点。将离散型特征使用one-hot编码,确实会让特征之间的距离计

  • 杨老师课堂_安卓教程第一篇之入门

    1.1G-4Gg:generation代3g:第三代移动通信技术 1g:大哥大 特点:安全性差,容易受干扰,通话不稳定,不能发短信 2g:小灵通等功能机 特点:通话质量稳定,可以发短信彩信,简单wap上网,支持一些简单的java游戏 3g:androidios等智能手机 特点:上网快了很多,能够处理图像,音乐,视频流等多种媒体形式. 4g:lte,longtimeevolution 特点:上网速度更快,100M带宽。 区别:网速不同,处理的内容不同复制2.Android操作系统介绍android系统是由安迪鲁宾团队开发的,最初用于数码相机,2005.08被google收购 android名字是因为安迪鲁宾喜欢一个游戏的人物--大瓢虫 android图标:上厕所的灵感 android应用范围:手机,平板,智能家居,穿戴设备。复制3.Android进化史2.3比较稳定的一个版本,NFC近场通信技术 3.0专为平板设计 4.1.24.0后比较稳定的版本,4.*同时支持平板和手机 5.0新特性复制4.Android系统架构(重点)分层的架构 JNIjavanativeinte

  • 黑盒测试和白盒测试的区别

    一. 软件测试方法1.        软件测试方法:白盒测试、黑盒测试、灰盒测试、静态测试、动态测试2.        白盒测试:是一种测试用例设计方法,在这里盒子指的是被测试的软件,白盒,顾名思义即盒子是可视的,你可以清楚盒子内部的东西以及里面是如何运作的,因此白盒测试需要你对系统内部的结构和工作原理有一个清楚的了解,并且基于这个知识来设计你的用例。白盒测试技术一般可被分为静态分析和动态分析两类技术。静态分析主要有:控制流分析技术、数据流分析技术、信息流分析技术。动态分析主要有:逻辑覆盖率测试(分支测试、路径测试等),程序插装等。白盒测试优点:迫使测试人员去仔细的思考软件的实现;可以检测代码中的每条分支和路径;揭示隐藏在代码中的错误;对代码的测试比较彻底;最优化。白盒测试缺点:昂贵;无法检测代码中遗漏的路径和数据敏感性错误;不验证规格的正确性。3.        黑盒测试又叫功能测试,这是因为在黑盒测试中主要关注被测软件的功能实现,而不是内部逻辑。在黑盒测试中,被测对象的内部结构,运作情况对测试人员是不可见的,测试人员对被测产品的验证主要是根据其规格,验证其与规格的一致性。在绝大多数

  • SSH连接时出现Host key verification failed的原因及解决方法

    SSH连接的时候Hostkeyverificationfailed.[root@cache001swftools-0.9.0]#ssh192.168.1.90 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @WARNING:REMOTEHOSTIDENTIFICATIONHASCHANGED!@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ITISPOSSIBLETHATSOMEONEISDOINGSOMETHINGNASTY! Someonecouldbeeavesdroppingonyourightnow(man-in-the-middleattack)! ItisalsopossiblethattheRSAhostkeyhasjustbeenchanged. ThefingerprintfortheRSAkeysentbytheremotehostis 05:25:84:ea:dd:92:8d:80:ce:ad:5b:79:58:f

  • JS-【同页面多次调用】tab选项卡封装

    这两天遇到一个页面,同一个页面中同一个特效会用好多次,比如tab,比如轮播等。我又不想很不负责任的复制一遍代码,那样页面臃肿,自己心里也堵得慌。于是就想着把代码封装起来多次调用。对于封装,只在公开课看过一个老师操作,自己也是啥也不懂得。好歹最后在群里大神的指导下,一步一步的由简致难完善了。就上最后的版本吧,中间的迭代版,,也只是方便以后封装其他的话参考用。最后的总结就是,一口吃不成个胖子,我前两天一直想的是封装起来,就从最难的代码开始捣鼓,捣鼓半天把自己都绕晕了。程序这回事,你思路比电脑清楚,首先就应该想的比电脑还简单,然后再绕线升级。一上来就打大boss的游戏,什么装备和技能都还没攒,你不死谁死。html:<divclass="aTapWrapaboutA_P"id="aTapWrap"> <ulid="aTapHeadWrap"> <liclass="tapActiveLi">关于我们</li> <li> 联系方式</li> <

  • 袁泉创办国内首家决策智能公司,ACM全球总决赛发布星际争霸II赛题(附视频)

    作者:张乾【新智元导读】近日,智能决策公司启元世界在ACM挑战赛期间亮相,并举办了基于《星际争霸II》的AI人机协作挑战赛。挑战中,AI能与人相互协作、理解、感知,胜率达到48.8%。启元世界是由前阿里认知计算实验室资深总监、淘宝推荐算法创始人袁泉创办,目前已获数千万天使轮融资。去年乌镇围棋峰会上,AlphaGo作为队友加入古力对阵连笑之后,国内就很少再有人机协作的新闻了。但人机协作能力的提升,对人类和AI的相互学习、互相借力,使得人类自身潜能不断释放都有着重要意义。柯洁虽败于AlphaGo但棋力大涨就是最好的说明。 本周,国内领先的智能决策公司启元世界在ACM挑战赛期间亮相,并举办了基于《星际争霸II》的AI人机协作挑战赛。在比赛中,展示了人和AI之间实现实时的互相感知、互相理解、互相协作完成复杂任务的能力。启元世界是由前阿里认知计算实验室资深总监、淘宝推荐算法创始人袁泉,前阿里搜索广告架构负责人龙海涛共同发起成立,以认知决策智能技术为核心,这次发布的人机协作挑战赛,也是今年国内公司在决策智能上的第一次尝试。AI是人的“神队友”:走位配合、东西分头并进,干扰和阻挡对手本次举办的人机协

  • 2015Google I/O开发者大会时间确定,有哪些新技术

    据悉:GoogleI/O2015谷歌开发者大会将于5月28日举行,并于3月17日开始接受登记预购入场通行证。现在让我们来猜测一下会有哪些新技术的出现呢?1、谷歌眼镜能否有未来?谷歌眼镜可能是谷歌公司近年来最具创新性的硬体产品,带来了一种完全融入人类生活中的设备体验.但遗憾的是,由于价格昂贵、隐私及时尚度问题,谷歌眼镜一直未能真正走入到大众的生活中,最近还传出了开发者纷纷离开的消息,令人对谷歌眼镜的未来感到担心。不过,从谷歌近日申请的专利来看,谷歌似乎并没有放弃智能眼镜产品,甚至有望在新产品中搭载指纹、语音甚至是静脉识别等生物级的传感器,实现更方便的应用形式。谷歌是否会在I/O2015上发布传闻已久的谷歌眼镜消费者版?这是一个值得期待的悬念。2、智能移动健康领域随着移动健康医疗的快速发展,2014年是移动健康医疗大起步的一年,2015年必定是移动健康医疗大发展的一年。运动监测显然是科技厂商们关注的另一个领域,苹果的健康平台已经在iOS8系统中获得了较好的使用效果,而谷歌也在2014年发布了GoogleFit健康平台。遗憾的是,GoogleFit目前的功能表现并不完善,仅支持有限的计步功能

  • 钉钉H5微应用

    公司新项目要用到Vue+钉钉H5,在此记录一下免密登录: 引入插件: import*asddfrom'dingtalk-jsapi' import{loginasloginUrl}from'../api/login'复制 新建方法: exportfunctionlogin(){ returnnewPromise((resolve,reject)=>{ dd.ready(function(){ dd.runtime.permission.requestAuthCode({ corpId:'dingdbcd84596436b4d535c2f4657eb6378f', onSuccess:function(result){ /*{ code:'hYLK98jkf0m'//stringauthCode }*/ //console.log(result) loginUrl(result.code).then(val=>{ if(val.code===200){ resolve(val.data) } }) }, onFail:function(_err){ resolve('

  • lodash

    //常用的数组方法按长度进行切割数组 constarr=[1,2,3,4] constnewArr=_.chunk(arr,2) console.log(newArr); //过滤假值 constarr=[1,false,undefined,NaN,'',22,null] constnewArr=_.compact(arr) 或者 constnewArr=arr.filter(Boolean) console.log(newArr); //数组去重(将数组中的对象去重,只能是数组去重,不能是对象去重。) constarr=[1,false,undefined,NaN,'',22,null,1] constnewArr=_.uniq(arr) console.log(newArr); //根据条件去除某个元素 constarr=[ {id:0,name:"aaa",age:33}, {id:1,name:"bbb",age:25}, ] constnewArr=_.reject(arr,["id",0]) //打乱顺序 _.shuffle([1,2,3,4]);//无序化 //常用的对象

  • Excel 使用技巧

    相对引用、绝对引用 微软官方文档:相对引用、绝对引用 快速填充 神奇的Excel快速填充功能,到底有多牛逼?

  • 三载忘忧

    作曲:钦觉 演唱:钦觉 作词:萧兮凉子 编曲:乐正弦 念白:钦觉、了尘、江懿黎 海报:以渡 制作:剑侠情缘手游 江:我看过很多地方的桃花,走过很多地方的桥,喝过很多地方的酒, 却没在任何一处停留过。 歌词: 千家灯火,天地脉脉,滔滔多少过客。 山河落落,尘世漂泊,仗剑赴风波。 风烟俱落,江天漠漠,辽阔天地和我。 恍然失落,一梦如昨,往事最难割舍。 钦:你眼中是这江湖,我眼中是你。 歌词: 人生行止,江湖恣意,快马驰千里。 枪尖如霓,寒芒飞起,胜败输赢不计。 只愿与你,一见倾心,江湖相守相依。 世间离散,只要一句,白首莫相离。 了:江湖同载酒,有你才忘忧。 歌词: 扇出游龙,剑舞惊鸿,负手恩怨重重。 衣袂如虹,风虎云龙,朗朗乾坤翻涌。 歌词: 人生行止,江湖恣意,快马驰千里。 枪尖如霓,寒芒飞起,胜败输赢不计。 只愿与你,一见倾心,江湖相守相依。 世间离散,只要一句,白首莫相离。 歌词: 人生行止,江湖恣意,快马驰千里。 枪尖如霓,寒芒飞起,胜败输赢不计。 只愿与你,一见倾心,江湖相守相依。 世间离散,只要一句,白首莫相离。 了、钦:剑心未老情缘未了三生有幸江湖有你 钦

  • list 求和 平均值 最大值 ---reverse 源列表反转 ---sort 正序排序

    #求和 l=[88,97,79,89,76] re=0 foriinl: re+=1 print(re//5)#平均值 # print(sum(l))#he print(max(l))#max #max推演思路 #默认第一个值最大打擂l[0] #后边的元素和参照物依次作比较循环 #后边元素大于参照物重新赋值给参照物 l=[88,97,79,89,76] max_num=l[0]#参照物 i=1#不用和本身比较和后一位比较 whilei<len(l): ifl[i]>max_num: max_num=l[i] i+=1 print(max_num) l=[88,97,79,89,76] xiao_num=l[0] i=1 whilei<len(l): ifl[i]<xiao_num: xiao_num=l[i] i+=1 print(xiao_num) #reverse源列表反转 #sort正序排序 l=[88,97,79,89,76] l.reverse() print(l)#[76,89,79,97,88] #反序推演过程 l=[88,97,79,8

  • UWP Button添加圆角阴影(三)

    原文:UWPButton添加圆角阴影(三) Composition DropShadow是CompositionAPI中的东西,使用Storyboard设置某个属性,就是频繁的触发put_xxx()方法,效率远远不如使用CompositionAnimation。 Composition对象的基类CompositionObject拥有一个属性叫ImplicitAnimations,可以通过他实现累死css的transition的效果,也就是对应属性修改的时候,平滑的过渡过去。 可以从DropShadowPanel的源代码中看到,DropShadow是设置在ShadowElement上的ChildVisual。 相关内容可以查阅将可视化层与XAML结合使用-ElementCompositionPreview.SetElementChildVisual方法。 而我们要做的,是把整个构造过程倒过来,通过VisualTreeHelper,从DropShadow中拿到ShadowElement,然后获取他的ChildVisual和Shadow,将ImplicitAnimations设置到Shado

  • 第1-2周作业

    作业1:安装环境,截图编程界面,截图运行界面       作业2:九宫格 <?xmlversion="1.0"encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayoutxmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <TextView android:id="@+id/line1" android:layout_width="50dp" android:layout_heig

  • Python_自定义关键字的使用

    1.在Python中新建一个套件MOSAPP(一般为APP名称):NewSuite→Directory 2.在套件下新建个资源文件My:NewResource:My 3.在My资源文件库下新建个关键字Mytest:NewUserKeyWord:Mytest 4.在01smoke下新建一个变量test,变量名为${test},Value为123:AddScalar→填好name和value,点击OK 5.在关键字中可调用变量(输入变量名:${test}) 6.新建一个套件MessageCenter(一般为功能模块名):NewSuite→File 7.在MessageCenter套件下新建一个资源文件01smoke:NeWSuite→File 8.在MessageCenter资源文件下添加关键字的资源文件,该例子中为关键字test的资源文件Mytest:Resource→选择Mytest保存路径 9.在资源文件01smoke下新建一个测试用例:消息中心页面返回:NewTestCase,该测试用例可调用Mytest关键字 10.此时关键字可以调用变量,用例中可调用关键字使用

  • 通过Nginx实现负载均衡

    百度了下负载均衡:英文名称为LoadBalance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务 嗯,跟我理解差不多:如果你的网站请求很多(是“很多”),造成什么结果呢?响应速度变慢(每个请求都是要创建线程去执行的,而一台服务器能同时开辟的线程数是有限的),严重的服务器崩掉。 如何解决呢? 办法一:更换服务器,换台牛逼点的呗,4核换8核,8核换16核,16核....额,那这样是不是很贵啊?这是肯定的,所以呢 办法二:不换服务器,加服务器,多弄几天价廉的服务器,这也是一种解决办法。将请求分散到不同的服务器上,这样一来,压力平摊了,多好。老板说:这个好,这个好。 针对办法二,最关键的一点就是如何将请求分散到不同的服务器上,这需要一种算法,最最简单的可以弄个随机算法,我之前在分布式存储图片中提到过: varlist=db.ImageServerInfo.Where<ImageServerInfo>(c=>c.State==1).ToList(); intserverCount=lis

相关推荐

推荐阅读