JS继承--圣杯模式

js代码-圣杯模式demo 立即下载

今天看到一篇文章,讲到了JS中的继承,提及了一个新的概念,圣杯模式。于是查阅了一下资料,看到对于圣杯模式的描述如下:

var inherit = ((Origin, Target)=>{
	let F= function(){};
	return (origin, target)=>{
		F.prototype = Origin.prototype;
		Target.prototype = new F();
		Target.prototype.constructor = Target;
		Target.prototype.ancestor = Origin.prototype; 
	}
})();

其对应解决的现实问题时,子类需要继承父类的属性和方法,并且需要根据自身的需求对父类中的方法进行相应的修改,但是修改后不能影响先前父类实例化之后实例方法。

其实个人感觉上面的方法是多余的,既然想继承父类的方法和属性,又想自定义某些方法,同时不影响父类原型对象上的方法,根据JS的特性,使用原型委托是最好不过的。举个列子。

function Person(){}
Person.prototype.hello = ()=>{console.log('hello')};
Person.prototype.spell = ()=>{console.log('spell')};

person1 = new Person();

function ChinaPerson(){}

现在想定义一个ChinaPerson类,继承自Person,但是ChinaPerson需要改写hello方法
最简单的写法如下:

ChinaPerson.prototype = Object.create(Person.prototype);
ChinaPerson.prototype.hello = ()=>{console.log('你好')}

person2 = new ChinaPerson();

person1.hello();
person1.spell();

person2.hello();
person2.spell();

这里有一个简化的版本:

function inherit(Origin, Target){
	Target.prototype = Object.create(Origin.prototype);
	Target.prototype.constructor = Target;
	Target.prototype.ancestor = Origin.prototype; 
}

上面的实例中,ChinaPerson的hello方法不会影响Person中的hello方法,两者互不影响。而使用该方法和上面的圣杯模式,其本质都是一样的,都是利用的原型链中的一个特性,默认情况下,修改对象的属性时, 只会修改实例对象本身的属性,如果不存在,则进行添加该属性,不会去修改原型链上的属性。

别再只看成交量了!用通达信这个VOL监测公式,一眼识别主力吸筹与出货信号 本文详细介绍了通达信VOL监测公式的实战应用,通过彩色量柱和换手率分层技术,帮助投资者识别主力吸筹与出货信号。该公式结合动态量能标准化和多周期均线组合,提供可视化主力行为图谱,提升交易决策的准确性。 阅读详情

相关推荐

详解电路设计中的RC电路

​ 一、什么是RC电路 RC电路是指由电阻R和电容C组成的电路,它是脉冲产生和整形电路中常用到 的电路。 常见的RC充、放电电路、RC积分电路合RC微分电路接下来详细讲解。 二、RC充、放电电路 RC充、放电电路如下图所示,下面通过充电和放电两个过程来分析此电路。 ​RC充、放电电路图 (1)RC充电电路 RC充电电路图如下图(a)所示 RC充电电路图及充电曲线图 ​由上图分析: 将上图a中开关S置于“1”处,电源E开始通过电阻R对电容C充电,由于刚开始充电时电容两端没有..

IT xiaobai 4万+

【JS 构造|原型|原型链|继承(圣杯模式)|ES6类语法】下篇

“js面向对象”最全攻略

Q_3603的博客 1951

麒麟操作系统Kylin如何从 2203 升级到 2403

fill:#333;important;important;fill:none;color:#333;color:#333;important;fill:none;fill:#333;height:1em;开始升级流程第一步:升级前准备1. 确认版本为 V10 SP1 22032. 备份全部重要数据3. 确保网络稳定4. 关闭应用第二步:选择升级方式方法一:图形界面升级方法二:命令行升级1. 更新现有系统至最新2. 启动“系统升级”工具3. 检测并开始下载2403。

让编程变的很简单!! 2661

JS中的圣杯模式

点击去原文 圣杯模式是Javascript中用来实现继承的一种方法,它的简单形式如下所示 function Father(){} function Son(){} Father.prototype.lastName=‘Jack‘; //圣杯模式 function inherit(Target,Origin){ function F(){}...

liangtaox8的博客 445

手把手教你:在联想/戴尔笔记本上安装华为电脑管家,实现多屏协同(附详细避坑步骤)

本文详细指导如何在联想、戴尔等非华为笔记本上安装华为电脑管家,实现多屏协同功能。从硬件兼容性检查到定制化安装流程,再到功能调优与异常处理,提供了一套完整的解决方案,帮助用户突破品牌限制,享受华为生态的高效办公体验。

weixin_30251829的博客 850

基于SOEM的伺服电机控制实战:从配置到调试

本文详细介绍了基于SOEM的伺服电机控制实战,从硬件配置到软件调试的全过程。通过分享PDO映射、状态机控制、性能优化等核心技巧,帮助开发者快速掌握EtherCAT通信与伺服电机控制的关键技术,提升工控系统开发效率。

weixin_29165465的博客 520

js继承“圣杯模式”演变

继承,在面向对象的编程中用的还是非常多的,虽然面向对象因为其复杂的构建对象的初始化,在大多数的程序中并没用用到,但是我们使用过后才发现,这使得今后项目的扩展和维护更加容易。话不多说,进入正题。 1. 传统形式(原型链继承) //父类 Father.prototype.name = "Li" function Father() { this.age = 18 } //子类 Son.prototype = new Father() function Son() {} var son = new Son()

qq_33282279的博客 561

AMD KFD的SDMA Packet 类型和定义解析

本文详细分析了AMD GPU架构中的SDMA(System Direct Memory Access)数据传输机制,重点介绍了其核心数据结构——SDMA Packet。SDMA通过8种主要Packet类型(包括内存拷贝、数据写入、屏障同步、中断触发等)实现高效主机-设备通信。每种Packet采用位域结构和联合体封装设计,在保证功能完整性的同时实现空间优化。这些Packet支持丰富的访问属性和扩展字段,适用于高性能数据搬运、内存初始化、任务同步、性能分析等场景,为GPU计算提供了灵活高效的数据传输解决方案。

图形/计算GPU的驱动与虚拟化技术分享园地 1252

关于圣杯模式和双飞翼模式,思维导图+源代码+笔记+项目

由于篇幅限制,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!点击【学习资料】即可免费领取!由于篇幅限制,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!点击【学习资料】即可免费领取![外链图片转存中…(img-rwGDlPod-1712300790481)][外链图片转存中…(img-47C4QB5H-1712300790481)]

2401_84097678的博客 417

数据科学技术与应用【中国大学MOOC】:数据可视化_第五次作业_答案

数据科学技术与应用 数据可视化 第五次作业 答案 题目来源:中国大学MOOC-东华大学-宋晖等-数据科学技术与应用 1 ( 30分 ) 2012—2017年我国人均可支配收入为[1.47, 1.62, 1.78, 1.94, 2.38, 2.60](单位:万元)。按照要求绘制以下图形。 1)模仿例4-1和例4-3,绘制人均可支配收入折线图。用小矩形标记数据点,黑色虚线,用注解标注最高点,图标题为“Income chart”,设置坐标轴标题,最后将图形保存为JPG文件。 2)模仿例4-2,使用多个子图分别绘制

Herbert胡不归 6140

提示词编写:从新手到专家的进阶之路

本文旨在为提示词编写者提供一条从新手到专家的进阶之路。我们将详细探讨提示词编写的背景与意义、基础与进阶技巧、实战应用以及最佳实践。通过逐步深入的分析与实操,读者将掌握提示词编写的核心要点,提高编写效率和作品质量。提示词是用于引导人工智能生成文本的关键词或短语,它包含了作者想要传达的主题、情感和细节。随着人工智能技术的普及,自动化写作工具逐渐应用于各行各业。为了提高写作效率,项目团队决定开发一款基于人工智能的自动化写作工具。成功开发了一款自动化写作工具,生成文本质量较高。

AI天才研究院 1086

js原型继承,圣杯模式继承

js-继承,圣杯模式 1.call() 1.call()可以调用函数; 2.call()可以修改this指向,使用call()的时候,第一个参数是修改后的this指向,参数2,参数3…使用逗号隔开; function fun(x, y) { console.log(this); //this指向改变,指向obj console.log(x + y); } var obj ...

清风的博客 304

104、线缆与终端匹配:特性阻抗、双绞线规格与端接电阻优化策略

摘要: CAN总线物理层可靠性取决于线缆特性阻抗、双绞线规格与终端电阻的精准匹配。核心要点包括: 特性阻抗须严格匹配120Ω(±10%),反射系数需≤0.05,线缆建议选用Belden 3086A等实测达标型号,避免网线替代; 双绞线应选AWG22~24纯铜线,绞距≤30mm,工业环境需屏蔽层单端接地,杜绝铜包铝线; 终端电阻需选用金属膜电阻(0.5W以上),阻值按实测线缆阻抗微调,长距离可采用分裂终端(60Ω+4.7nF)优化信号完整性; 拓扑适配:星型/树型拓扑需控制分支长度,环型拓扑必须断开; 实测验

2401_88858637的博客 51

js继承—圣杯模式

普通写法(会影响父类) function Father(){ } function Son(){ } Father.prototype.lastName = "Deng"; //继承方式,公有原型 function inherit(Target,Origin){ Target.prototype = Origin.prototype; } inherit(Son,Father); var son = new Son; console.log(son.lastName); Son.pr

chenchen_fcj程序猿的博客 423

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

JavaScript 继承模式发展史(圣杯模式!!!)

JavaScript继承发展史:01 原型链(传统模式)优点:父类的方法和属性得到了复用。缺点:过多的继承了没用的属性,子类实例没有自己的属性。02 借用构造函数 优点:子类的每个实例都有自己的属性,不会相互影响。 缺点:没有实现父类方法的复用,不能继承借用构造函数的原型,每次构造函数都要多走一个函数。03 共享原型 优点:用法简单。缺点:不能随便改动自己的原型。04 圣杯模式(important!)优点:中间生成了一个对象,起到了隔离的作用。既可以有父辈的属性和方法,改变自己的时候,也不会影响父辈的属性。

Yuki_yuhan的博客 1620

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

JS继承--圣杯模式的详解

继承发展史 传统的模式 ==> 原型链 Grand.prototype.lastname = "Alex"; function Grand(){ } var grand = new grand(); Father.prototype = Grand; function Father(){ this.name = "Aimee" } var father = new Father(); son,prototype = father; function Son(){ } var son =

m0_46232069的博客 1541

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

JavaScript继承(圣杯模式)的个人笔记

继承上期题目解答一、传统形式——原型链二、借用构造函数三、共享原型四、圣杯模式(面试时问继承的标答)五、其他 上期题目解答 1.请输出下面构造该对象的构造函数的名 function A(){}; function B(){}; function CreateObj(){ var n = Math.random(); if(n < 0.5){ return new A(); }else{ return new B(); } } var obj = CreateObj(); console

xun__xing的博客 952

Js-圣杯模式实现继承

Js-圣杯模式实现继承

shuangzicuo1991的博客 567

圣杯模式 JS继承

圣杯模式 JS继承 //圣杯模式 //JS继承 function inherit(Target, Origin) { function F() {}; //中间值,这样son可以自己构造自己的属性,而且不改变father的空间。 F.prototype = Origin.prototype; Target.prototype = new F(); Target.prototype.constuctor = Target; //让constuctor,指向自己

m0_56522412的博客 250

JavaScript 之 继承 ,封装一个最佳的继承函数 —— 圣杯模式

今天的内容,与之前原型和原型链的知识有联系,可以看我的上一篇文章原型、原先链。 文章里有详细的介绍。因为继承的学习是建立在这些知识的基础之上的。 首先来说下为什么要用继承吧。当我们自定义构造函数并且实例化对象时,总会重复的书写相同的属性或者方法,这就让我们的代码高耦合了,简单来说就是简化程序优化代码。当对象用到相同的属性和方法时,只要继承过来就行了,若需要自己特有的属性方法再追加即可。这是我个人对为什么用继承的理解。也许是比较片面的,欢迎大家指正。 原型链实现继承 利用原型链来实现继承是传统方式的继承,主要

爱前端的程序媛的博客 385

JS —— 圣杯模式(原型链继承)

// 圣杯模式 // 为了son继承father原型上的东西,还可以修改自己原型上的东西,对father原型不影响。 function inherit(Target,Origin){ function F (){};// 函数F作为一个中间层,上连father,下连Son,使两函数互不干扰 ...

weixin_30826761的博客 319

JavaScript之继承模式(圣杯模式)

1.传统形式 过多的继承了没用的属性 2.借用构造函数 不能继承借用构造函数的原型 每次构造函数都要多走一个函数 function Person(name,age,sex){ this.name = name; this.age = age; this.sex = sex; } function Student(name,age,sex,tel,grade){ // this...

AC总有一天的博客 414

JavaScript继承模式圣杯模式

出处:腾讯课程上面教学视频 function Father(){ } function Son(){ } inherit(Son, Father); var son = new Son(); //圣杯模式 function inherit(Target, Origin){ function F() { }; F.prototype = Origin.prototype;...

turn_future的博客 380

js继承的几种方式及圣杯模式

1.原型链继承 functionGrand(){} Grand.prototype.lastName='hiahia'; vargrand=newGrand() functionFather(){ this.name='hehe' } Father.proto...

qq_37167086的博客 353

js 继承、继承的圣杯模式解读、class继承的使用

使用prototype实现继承 function Parent() { this.name = 'parent'; } function Son() { } function inherit(Son, Parent) { Son.prototype = Parent.prototype } 此时初步实现了Son继承Parent 如果我们现在想要为此后Son创建的实例添加一个属性f...

qq_29590623的博客 564

【Javascript】几种继承模式(传统、call/apply、共享原型、圣杯模式)

1、传统模式 —— 原型链 Son.prototype = new Father() 过多的继承了没用的属性。 2、借用构造函数 —— call、apply var son = {}; Father.call(son) 不能继承借用的构造函数的原型 多走一个函数 3、 共享原型 不能随便改动自己的原型,因为指向同一个空间。 function Father(){} function ...

q19149的博客 221
上一篇: JS中的this绑定
下一篇: 行内元素设置padding和margin
izwell
博客等级 码龄14年 16粉丝 88原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值