JS继承模式

快速了解GPU分布通信技术:PCIe、NVLink与NVSwitch PCIe(Peripheral Component Interconnect Express)是一种高速串行计算机扩展总线标准,广泛用于连接计算机的各种硬件设备。PCIe4.0是目前较为先进的版本,提供了高达64GB/s的带宽。InfiniBand是一种用于高性能计算的高速互连技术,通过交换机在节点之间直接创建一个专用的受保护通道。InfiniBand适配器通过PCIe接口连接到CPU,另一端通过InfiniBand网络端口连接到InfiniBand子网。 阅读详情

JS继承模式

继承发展史

1 传统模式 -->原型链

 过多继承了没用属性

Grand.prototype.lastNmae= 'Wang';
function Grand() {

}
var grand = new Grand();

Father.prototype = grand;
function  Father() {

}
var father  =  new Father();

Son.prototype = father;
function  Son() {

}

2 借用构造函数

不能继承借用构造函数的原型

每次构造函数都要多走一个函数

function Person(name,age,sex) {
    this.name = name;
    this.age = age;
    this.sex = sex;
}
function Stuendt(name,age,sex,grade) {
    Person.call(this,name,age,sex);
    this.grade = grade;
}
var student = new Stuendt("j",23,'male',2017);

3共享原型

不能随便改动自己的原型

Father.prototype.lastName = 'Wang';
function Father() {

}
function Son()  {

}
Son.prototype = Father.prototype;
var son = new Son();
var father  = new Father();

优化以上代码

Father.prototype.lastName = 'Wang';
function Father() {

}
function Son()  {

}

function inherit(Target,Origin) {
    Target.prototype = Origin.prototype;

}
inherit(Son,Father);
var son = new Son();
var father  = new Father();

但是这里如果son 要加一个属性则会影响father

eg:

Father.prototype.lastName = 'Wang';
function Father() {

}
function Son()  {

}

function inherit(Target,Origin) {
    Target.prototype = Origin.prototype;

}
inherit(Son,Father);
Son.prototype.sex = "male";
var son = new Son();
var father  = new Father();

很明显改动son后father的原型也发生了改变。

4圣杯模式

Father.prototype.lastName = 'Wang';
function Father() {

}
function Son()  {

}

function inherit(Target,Origin) {
    function F(){}
    F.prototype = Origin.prototype;
    Target.prototype = new F();

}
inherit(Son,Father);
Son.prototype.sex = "male";
var son = new Son();
var father  = new Father();

但是这里还存在一个问题:

 

son._proto_    -->   new F()._proto_   -->    Father.proto

所以为了让 son的constructor变为自己的,所以继续优化得:
 

Father.prototype.lastName = 'Wang';
function Father() {

}
function Son()  {

}

function inherit(Target,Origin) {
    function F(){}
    F.prototype = Origin.prototype;
    Target.prototype = new F();
    Target.prototype.constructor =  Target;

}
inherit(Son,Father);
Son.prototype.sex = "male";
var son = new Son();
var father  = new Father();

这就是为了让son 的构造函数变为自己的

Target.prototype.constructor =  Target;

这里为了能够让son知道 自己继承自谁所以以上程序可以继续优化得:

Father.prototype.lastName = 'Wang';
function Father() {

}
function Son()  {

}

function inherit(Target,Origin) {
    function F(){}
    F.prototype = Origin.prototype;
    Target.prototype = new F();
    Target.prototype.constructor =  Target;
    Target.prototype.uber = Origin.prototype;
}
inherit(Son,Father);
Son.prototype.sex = "male";
var son = new Son();
var father  = new Father();

这里增加了

Target.prototype.uber = Origin.prototype;

这就是圣杯模式。

 

海康/大华设备如何接入GB28181平台?最新2022版互联避坑指南 本文详细解析了海康/大华设备接入GB28181平台的最新2022版互联避坑指南,涵盖参数配置、实时视音频点播协议交互及典型故障排查。重点介绍了GB/T28181-2022标准下的设备编码规范、SIP服务器配置及媒体流保活机制,帮助工程团队高效解决设备离线和媒体流中断等问题。 阅读详情

相关推荐

MFC使用Websocket通讯介绍和实例(附完整源码)

踩坑点,下载了好几个boost版本编译,经常出问题,后来搜索了好久资料才发现如下评论:WebSocket++0.8.2 has been tested through Boost 1.72。WebSocketpp依赖于boost,因此在使用WebSocketpp前需要编译Boost;所以我们直接下载Boost 1.72的windows版的进行安装,安装完成还需要编译;WebSocketpp也叫WebSocket++;服务编译好之后,使用。

weixin_42530684的博客 1171

JavaScript继承方式及原理

继上篇文章深入剖析prototype、constructor、_proto_原理后,接下来整理、理解JS中的继承就水到渠成,一气呵成! 话不多说,上个文章中说过,原型链最主要就是为了解决JS在面向对象中继承功能的实现。所以在js继承中第一种要介绍的方式当然是从原型链继承。过程中会插入我对该种继承产生过的一些疑惑并作出解答,希望这对你的理解能带来帮助 原型链继承: function Father () { this.name = 'father'; } .

bigname22的博客 454

鱼眼双目测距实战:从OpenCV标定到SGBM匹配的完整流程解析

本文详细解析了鱼眼双目测距的完整流程,从OpenCV标定到SGBM匹配,涵盖标定、校正、匹配和测距四个关键阶段。通过实战经验分享,帮助开发者解决鱼眼镜头强畸变带来的测距挑战,提升测距精度至5%以内。特别适合机器人导航、自动驾驶和VR领域的开发者参考。

weixin_27298377的博客 124

js(六)---对象的枚举和继承

对象的枚举上篇也简单的说到了对象的枚举,接下来就正式介绍一下对象的枚举吧。在正式说说枚举之前,首先要了解一下,对象查找的概念吧。大家都知道对象的查找是obj.name,但是实质上对象的查找的方法是obj[‘name’]。 特别像数组的一种方法,其实数组也是一种特殊的对象,所以说js中一切皆对象,所以说数组用到这个方法也是自然的。接下来,就说一下吧,说到对象的枚举很自然就想到了for in 操作符。

Shine_twinkle的博客 704

Protobuf NDK以及QNX交叉编译

Protobuf 用处很广,尤其是通讯数据序列化,反序列化。TODO。

静虚待令,有物混成 1560

蓝牙Mesh协议一基本概念

前言 蓝牙SIG联盟在2017年发布了蓝牙Mesh1.0的协议规格,基于低功耗广播包来实现的多对多的通信技术,Mesh协议建立在BLE的物理层和链路层上,所以也可以和BLE的蓝牙进行通信 本章主要介绍蓝牙Mesh的基本概念和协议中的层级结构,也是参考网上的资料,如有异议,欢迎留言指正 基本概念 广播和洪泛 蓝牙Mesh技术是基于BLE的广播报文来实现的,是一种洪泛的消息传输机制,Mesh网络的节点间通过3个广播信道进行通信。当蓝牙Mesh网络中的节点收到消息后会转发这条消息,大大增加了网络的覆盖范围;但

9742

js学习笔记之继承(圣杯模式)

js继承 圣杯模式及其高级方法: 为了防止后代影响到父亲的参数,使用一个构造函数来起过渡作用,即代码中的 Target.prototype = new F(); 这样即使Target.prototype传入一个参数,影响的也只是F()这个构造函数,而不会影响到F()的原型。 <script> //圣杯模式标准方案 function inheri...

qq_44353287的博客 450

UniApp 与 Taro 深度解析:如何根据项目需求选择最佳跨平台框架?

本文深度对比了UniApp和Taro两大主流跨平台开发框架。UniApp基于Vue生态,提供开箱即用的高效开发体验,尤其适合快速覆盖多端小程序;Taro则根植React范式,架构灵活,便于与现有React生态集成,更适合对性能和原生体验有高要求的复杂项目。文章结合团队技术栈、项目类型及性能需求,为开发者提供了清晰的选型指南。

snow3的博客 204

JS原型继承的多种方式以及优缺点

js也是一门面向对象的编程语言. 既然是面向对象,那它一定具备 --> 类、属性、原型这些要素,而类中又有封装、继承、多态这些玩法 封装:就是把类(也叫函数)中的一个功能的代码进行封装,从而实现低耦合高内聚 多态:重写、重载 重写:子类重写父类上的方法(伴随着继承运行的) 重载:相同的方法,由于参数或者返回值不同,具备了不同的功能(或调用了不同的方法),其实js不具备严格意义上的重载 (只能在同一个方法内,根据传参不同实现不同功能)why? ...

a996554776的博客 1377

告别CPU空转!用STC8的SPI+DMA高效驱动上百颗WS2812B灯珠

本文详细解析了如何利用STC8单片机的SPI+DMA外设高效驱动WS2812B全彩灯珠,解决传统软件延时驱动方式在长灯带应用中的性能瓶颈。通过硬件方案设计、数据格式转换和DMA传输配置,实现高达400Hz的刷新率和低于5%的CPU占用率,适用于大规模灯光项目。

weixin_30847939的博客 397

PX4飞控参数详解-Multicopter Position Control​多旋翼位置控制

Maximum horizontal velocity for which position hold is enabled (use 0 to disable check)//启用悬停时的最大水平速度(使用 0 可禁用此检查)(仅适用MPC_POS_MODE 0 或 MPC_ALT_MODE 2)Maximum horizontal and vertical jerk in Position/Altitude mode//位置/高度模式下的最大水平和垂直加加速度。

u013096791的博客 1817

JavaScript重难点——继承的发展及其特点

JavaScript继承的发展为什么需要继承?原因:我们希望能减少重复性的代码,并且尽量弱化对象间的耦合。然而继承的方式是慢慢发展,不断迭代更新的。1.传统形式——原型链//1.原型链的方式继承 //父类构造函数,用于定义实例属性 function Father() { } Father.prototype.lastName = "Chen"; //自定义的父类原型对象属性 var fathe...

sunny的博客 447

〔重庆理工大学〕大学物理实验--液体表面张力系数的测定

每个老师要求不同,实验报告内容和数据仅供参考。

Pretty Boy Fox的博客 2802

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

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

js继承模式

js继承模式 传统形式 ----> 原型链 过多的继承了没用的属性 Grand.prototype.lastName = "1"; function Grand(){ } var grand = new Grand(); Father.prototype = grand; function Father() { } var father = new Father(); Son.prototy...

lzDevastator的博客 203

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

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

组合继承:JavaScript 中最常用的继承模式解析

组合继承是JavaScript中一种结合原型链继承和构造函数继承的经典模式。它通过两次调用父类构造函数:一次在子类构造函数中(Parent.call(this))确保实例属性独立,一次通过原型链绑定父类原型方法(Child.prototype = Object.create(Parent.prototype))。这种方案解决了原型链继承的引用属性共享和传参问题,同时保留方法复用优势。虽然存在父类构造函数被冗余调用的问题,但其清晰的代码结构和实用性使其成为ES5时代的主流继承方案,也是理解ES6类继承底层原理

你若盛开,清风自来 1178

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

精读JavaScript模式(八),JS类式继承

一、前言 这篇开始主要介绍代码复用模式(原书中的第六章),任何一位有理想的开发者都不愿意将同样的逻辑代码重写多次,复用也是提升自己开发能力中重要的一环,所以本篇也将从“继承”开始,聊聊开发中的各种代码复用模式。 其实在上一章,我感觉这本书后面很多东西是我不太理解的,但我还是想坚持读完,在以后知识逐渐积累,我会回头来完善这些概念,算是给以前的自己答疑解惑。 二、类式继承VS现代继承模式...

weixin_30699443的博客 111

js对象创建模式、继承模式

在 JavaScript 中,对象创建模式多种多样,每种模式都有其独特的特点和适用场景。下面将对常见的对象创建模式进行详细解释。// 创建一个空的Object对象let person = new Object();// 动态添加属性person.name = 'John';person.age = 30;// 动态添加方法person.sayHello = function() { console.log(`Hello, my name is ${this.name}`);};let person =

奋斗的小前端 1024

【JS】《JavaScript设计模式》 之 JS继承

以前在准备面试的时候经常会看到面试题里有js实现继承的相关题,总觉得很少用的到,也没有太理解为什么要那么写,只是硬记下来了。最近在看《JavaScript设计模式》,里面有一节很详细的讲到了js继承,后面的模式里也经常用到,在这里记录下。 1.子类的原型对象——类式继承 // 声明父类 function SuperClass() { this.superValue = true } ...

amyleeYMY的博客 626

JavaScript继承模式

小编在上一篇博客之中所提及到的原型链其实是一种抽象的继承模式,通过prototype继承父亲属性,但这样的实际操作在对象上,每当需要继承属性那么就是要创建实际对象去实现继承,显然不是一个很好的继承模式,知识补充今天小编在介绍几种继承模式。 一、call、apply方法 作用:改变this指向 区别:传参列表不同 我们通过一个实际案例来看 function Father(name,age...

天明的博客 266

js 构造模式和继承

js 构造模式和继承 记录笔记 文章目录js 构造模式和继承前言一、构造模式二、继承总结 前言 一、构造模式 创建对象的方式: 1.工厂模式: 使用简单的函数创建对象,为对象添加方法和属性,返回对象。后这个模式被构造函数替代 问题:没有类型 2.构造函数: 可以创建自定义的引用类型,可以使用new操作符。缺点每个成员无法复用,包括函数,由于函数不限制于任何对象,因此没有理由不在多个对象间共享函数 问题:单独使用属性和方法不能复用 3.原型模式 使用构造函数的prototype属性来指定那些应该共享的属性

LetMet的博客 215

js的继承模式

文章目录 一、前言 相信很多人在遇到面试中都遇到过被问到过JavaScript继承模式的问题,都能手写出几种继承模式的代码例子,但为什么面试官却对你的回答不是很满意或者压根就没听懂,个人觉得应该是缺少自己的一个答题的思路。 二、答题技巧 第一,按照几种继承模式的从最次的继承模式到最佳的继承模式的顺序去讲 第二,讲出当前这种继承模式的利弊,相对前一种继承模式解决了什么问题,最关键的代码部分在哪里 以下着重讲一下几种常见的几种继承模式 三、原型链继承 代码示例 function Parent (se

木木木森林 245

JS继承--圣杯模式

今天看到一篇文章,讲到了JS中的继承,提及了一个新的概念,圣杯模式。于是查阅了一下资料,看到对于圣杯模式的描述如下: var inherit = ((Origin, Target)=&gt;{ let F= function(){}; return (origin, target)=&gt;{ F.prototype = Origin.prototype; Target.prototy...

izwell的博客 1692

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

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

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

Yuki_yuhan的博客 1621

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

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

爱前端的程序媛的博客 385
上一篇: JS原型
下一篇: JS命名空间with
白马非马啊
博客等级 码龄10年 13粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值