再看javaScript伪经典继承

JavaScript编程模式:从原型到函数式继承 本文深入探讨了JavaScript中不同的编程模式,包括原型模式、函数式继承以及伪经典继承。我们通过学习如何利用原型链来减少函数调用次数,如何使用函数创建可复用的对象,以及如何通过模块模式实现更高级的封装和隐私保护。文章强调了原型继承和函数式编程在JavaScript中的重要性和优势。 阅读详情
        为什么叫伪经典继承呢,因为javaScript中真的没有类。

        这里是两个伪经典继承的例子,第一种看上去更容易明明白,第二种只是在第一种的基础上对继承的细节进行了封装,使用起来更简单友好。多的不说,将代码自己写一遍自然就懂了。注释也有必要的说明。

// --------- the base object ------------
		//没有对继承细节进行封装
		function Animal(name) {
		  this.name = name;
		}
		// methods
		Animal.prototype.run = function() {
		  alert(this + " is running!");
		}
		Animal.prototype.toString = function() {//关于toString见另一篇文章:javaScript valueOf和toString方法在不同场景被调用进行数据转换
		  return this.name;
		}
		// --------- the child object -----------
		function Rabbit(name) {
		  Animal.apply(this, arguments);
		}
		Rabbit.prototype = Object.create(Animal.prototype);//inherit(Animal.prototype);
		//inherit是跨浏览器的,Object.create IE9后才兼容
		Rabbit.prototype.constructor = Rabbit;
		// override
		Rabbit.prototype.run = function() {
		 Animal.prototype.run.apply(this);//调用被子类覆盖了的父类方法
		  alert(this + " bounces high into the sky!");
		}

		var rabbit = new Rabbit('Jumper');
		rabbit.run();
		
		function inherit(proto) {
		  function F() {}
		  F.prototype = proto
		  return new F
		}

//将继承的细节进封装,这样可以更友好的使用父对象的方法,如Rabbit.parent.constructor、Rabbit.parent.run等
		function extend(Child, Parent) {
		  Child.prototype = inherit(Parent.prototype)
		  Child.prototype.constructor = Child//手动修正子类的constructor属性
		  Child.parent = Parent.prototype
		}
		//将父类prototype赋给一个空函数再返回空函数的实例赋给子类的prototype,而不是直接将父类对象赋给子类prototype
		//因为直接使new Animal()父类对象需要传入参数,使用inherit是很好的处理方式。但是经我测试new Animal()时不传入参数同样能正确执行.在判定浏览器的兼容性后可以使用Object.create代替,现代浏览器大多已经支持
		function inherit(proto) {
		  function F() {}
		  F.prototype = proto
		  return new F
		}
		
		// --------- the base object ------------
		function Animal(name) {
		  this.name = name;
		}
		// methods
		Animal.prototype.run = function() {
		  alert(this + " is running!");
		}
		Animal.prototype.toString = function() {
		  return this.name;
		}
		// --------- the child object -----------
		function Rabbit(name) {
		  Rabbit.parent.constructor.apply(this, arguments);
		}
		// inherit
		extend(Rabbit, Animal);
		// override
		Rabbit.prototype.run = function() {
		  Rabbit.parent.run.apply(this);//调用被子类覆盖了的父类方法
		  alert(this + " bounces high into the sky!");
		}
		var rabbit = new Rabbit('Jumper');
		rabbit.run();

//两种都会打印:Jumper is running!
  //Jumper bounces high into the sky!


//private类型的数据:这种模式中不支持private 类型的数据
//protected类型的数据:以下划线开头的命名代表protected类型的数据,不应该从外部对其进行访问(技术上是可以访问的)
 //static类型的数据:见另一篇文章:javaScript中的static类型数据

自动驾驶轨迹规划算法——Apollo EM Planner Apollo EM Planner 是百度自动驾驶系统中的轨迹规划算法,采用期望-最大化(EM)迭代优化思想。其核心是将轨迹规划分解为路径优化(E-Step)和速度优化(M-Step)两个子问题,在Frenet坐标系下交替求解。算法先通过动态规划(DP)搜索粗路径,再使用二次规划(QP)进行平滑优化,并结合障碍物信息生成安全走廊。相较Lattice、Hybrid A*等规划器,EM Planner具有更好的实时性、动态障碍物处理能力和轨迹平滑性,适用于城市道路、高速公路等复杂场景。该算法通过解耦路径与速度优 阅读详情

相关推荐

MATLAB/simulink电力系统之变压器仿真+变压器饱和仿真+空载变压器电流畸变原因及仿真+空载合闸励磁涌流仿真+simulink免费仿真资源

单相变压器空载运行时,原边电流主要用来产生主磁场,而电路损耗和铁芯损耗很小,因此即使外加电压很大,空载电流仍然很小。如果想观察某个相对磁导率下电感系数的数值,可以在程序中增加这样的语句,比如,在程序中end语句之后,加上L(100),运行程序后就可以得到相对磁导率为 100时的电感系数值。在交流铁芯线圈中,当交变磁通按照正弦规律变化时,受到磁路饱和的影响,线圈中的电流会发生畸变,并成为尖顶波,这就是所谓的交流磁路电流畸变。需要指出,铁芯内的主磁通Ф可以通过空载时的副边电压从来测量,两者之间的数学关系,即。

m0_37724753的博客 4231

JS最常用的继承方式——组合继承(伪经典继承)

组合继承有时候也叫做为经典继承,指的是将原型链和借用构造函数的技术组合到一起,发挥二者之长。背后的思路是使用原型链实现方式对原型属性和方法的继承,而借用构造函数来实现对实例属性的继承。 查看案例(高程三): function SuperType(name){ this.name=name; this.colors=["red","blue","green"]; } S...

奔跑的面条博客 435

ESP32 TWAI CAN库实战:从零构建CyberGear微电机控制框架

本文详细介绍了如何利用ESP32的TWAI控制器和Arduino环境,从零构建一个面向对象的CyberGear微电机控制框架。该框架将复杂的CAN通信协议封装为简洁的API,开发者无需深究底层细节,即可轻松实现电机的速度、位置和扭矩控制,大幅简化机器人关节、云台等项目的开发流程。

oil88的博客 499

Js实现继承的6种方式

Js实现继承的6种方式: 1.原型链继承 2.借用构造函数继承 3.组合继承(经典继承) 4.原型式继承 方法一: 方法二:Object.create() 5.寄生式继承 6.寄生组合式继承 7.ES6、Class实现继承

wuliyouMaozhi的博客 2万+

基于Simulink/Matlab的VSG并网系统单相接地与相间短路故障仿真建模与特性分析

本文详细介绍了基于Simulink/Matlab搭建虚拟同步发电机(VSG)并网系统仿真模型的方法,并重点分析了单相接地与相间短路故障下的系统特性。通过设置三相故障模块参数,模拟了故障发生时的电压、电流变化及VSG动态响应,为理解故障机理、优化控制策略及设计继电保护提供了仿真依据与实践指导。

t8u9v0w1x的博客 515

如何使用C#自带的GDI+双缓冲类BufferedGraphics实现双缓冲功能

小白摸索着编写一个上位机界面,将遇到的问题及解决方法记录下,以供后来的小白使用哈。这篇文章解决的问题是在绘图时候的闪烁问题。其中网上有些介绍的设置控制方式controlstyle的方法,这个方法我的理解是比较适合于在一个完整的窗口当中绘图。如果要在一个窗口当中的内部容器或者控件内画图的话就不太适合,通常按照前述的方法设置后没有任何效果。对于在窗口内部的绘图的来说,比较有效的方法是在内存当中开辟一块

z20110411的博客 4795

JavaScript 继承--组合继承(伪经典继承)

目录一、组合继承的实现二、缺点 组合继承:对象原型继承 + 构造函数继承 一、组合继承的实现 首先,我有几个问题,对象原型继承会继承this对象+prototype对象,构造函数继承会继承this对象, 那么这个this对象 以谁的为准? // 组合继承 function Super() { this.pbrand = 'super'; // 添加引用值 this.a = [1, 2, 3, 4, 5]; } function Sub

Lhy_JL的博客 297

Figma汉化教程

Figma汉化教程

cc蒲公英的博客 1万+

js经典继承

//组合继承(伪经典继承) function SuperType(name){     this.name = name;     this.colors =['red','blue','green']; }; SuperType.prototype.sayName = function(){     console.log(this.name); }; function SubType(name...

wen_binobject的博客 516

【Bug已解决】Codex 报错 MCP client for context7 failed to start: program not found 解决方案

方案适用场景推荐指数改用绝对路径Windows 上最常见、最有效的解决方式⭐⭐⭐⭐⭐提前全局安装避免依赖 npx减少运行时网络下载的不确定性⭐⭐⭐⭐使用 .cmd 后缀Windows 平台快速尝试⭐⭐⭐⭐开启调试日志需要更精确定位失败原因⭐⭐⭐⭐统一封装启动脚本需要跨平台兼容多个 MCP 服务⭐⭐⭐报错的本质是Codex 启动 MCP 子进程时,无法正确定位配置文件中写的简写命令名对应的可执行文件,尤其容易发生在 Windows 平台上使用npx这类简写命令的场景。

一键难忘的博客 5815

模型实战(31)之 yolo26 实现对手部关键点数据集 的训练与关键点检测

模型实战(31)之 yolo26 实现对手部关键点数据集 的训练与关键点检测

yohnyang的博客 210

【JavaScript学习】面向对象的程序设计(5):组合继承(伪经典继承)

基本思想将原型链和借用构造函数的技术组合到一块。 使用原型链实现对原型属性和方法的继承,通过借用构造函数实现对实例属性的继承。function SuperType(name){ this.name = name; this.colors = ["red","blue","green"]; }SuperType.prototype.sayName = function () {

Wonder233的学习博客 403

手把手教你如何在应用宝的Android模拟器安装第三方应用方法

通过上述步骤,你就能在腾讯应用宝模拟器中安装并运行本地的第三方APK应用了。虽然稍显繁琐,但操作起来并不复杂,只要按照步骤一步步做,就能顺利完成。希望这篇文章能帮助到遇到类似问题的你!

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 7216

JavaScript之组合继承(伪经典继承)

今天在了解javascript的组合继承时,发现此种继承方式结合了原型链和借用构造函数的方式来实现的,下面对此种继承的方式记录下来,首先来了解实现组合继承的过程。 1 <script type="text/javascript"> 2 function parent(name) //定义父类 3 { 4 this.name=name;...

weixin_30377461的博客 147

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

js继承(十)

一、原型链继承【子构造函数的原型对象是父构造函数的实例】【对原型属性和方法的继承】1、每个构造函数【prototype】都有一个原型对象,原型对象中都包含一个指向构造函数的指针【constructor】,而实例都包含一个指向原型对象的内部指针【__proto__】。当原型对象等于另外一个类型的实例即继承。eg: //创建父类Animal构造函数 function ...

diegui9561的博客 122

STM32F407中文手册

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

JavaScript的继承

每个构造函数都有一个原型对象,原型对象中包含一个指向该构造函数的指针(constructor),而实例中包含一个指向其构造函数的原型对象的内部指针(__proto__)。 ECMAScript中有三种继承,分别是原型链继承、经典继承、伪经典继承。 原型链继承:子构造函数的原型对象是父构造函数的实例。 //创建父构造函数 function Animal(name,age){ this....

King的博客 180

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

实现继承的多种方式和优缺点

实现继承的多种方式

薛跳跳的博客 2561

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

“js面向对象”最全攻略

Q_3603的博客 1951

7、js基础:继承实现技术(解决继承含有的缺点)

1、原型链实现继承存在的问题:(因为这些问题的存在,实践中很少会单独使用原型链) (1)、由于共享的特性,而造成修改一个父级的一个引用类型属性值时,会影响到其他实例 (2)、没办法在不影响所有对象实例的情况下,给超(父)类型的构造函数传递参数 2、借用构造函数(伪造对象、经典继承) 优点: 解决原型中包含引用类型值所带来的连带修改的问题 可以在子类型构造器中项超类型构造函

lcl6659的博客 576

JavaScript 中的基于 `call` 的继承

摘要:基于call的继承(构造函数继承)通过在子类中使用Parent.call(this)来继承父类属性。优点是支持传参、避免属性共享、不污染原型;缺点是无法继承父类方法、不支持复用、不是真正的继承。建议结合原型链实现组合继承,既能继承属性又能继承方法。适用于需要独立属性但需兼顾方法继承的场景。(147字)

weixin_43991457的博客 433

组合式继承

组合继承(combination inheritance) * 有时也叫"伪经典继承",指的是将原型链实现继承和借用构造函数技术和二为一. * 思路:使用原型链实现对原型属性和方法的继承,而通过街工构造函数实现实例属性的继承. * 既通过原型上定义的方法实现了函数复用,又能保证每个实例都有自己的属性. function SuperType(name) { thi...

宏斌的博客 1417

继承实现技术(解决继承含有的缺点)

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34307464的博客 264

js 继承

比如说有动物类,狗类。 动物类有名字,颜色。 狗类可以有自己的 种类,跑步姿势。 狗类继承动物类相当于是一种父子关系。子类继承父类的属性和方法,在其基础上进行扩展。 a.原型链继承 //原型链继承 function Animal(){} Animal.prototype.name="xiaobai"; Animal.prototype.age=2; Animal.prototype.sayName = function(){ console.log(this.name); } function Do

ASDJISJIDJSID525的博客 179

js的组合继承

组合继承也叫伪经典继承,指将原型链的借用构造函数的技术组合到一起,发挥二者之长的一种继承模式。思路是使用原型链实现对原型属性和方法的继承,而通过构造函数来实现实例继承,这样就既对原型上的方法实现了复用,又能保证每个实例独特的属性。 Supe

allenliu6的博客 314

JavaScript面向对象-基于原型链和函数伪装组合的方式实现继承

上文提到我们不会单独使用基于函数伪造的方式实现继承,而是会使用基于原型链和函数伪装组合的方式实现继承。这种继承方式也叫伪经典继承,它的思想是使用原型链实现对原型属性和方法的继承,而通过借用构造函数来实现对实例属性的继承。这样,既通过在原型上定义方法实现了函数的复用,又能够保证每个实例都有它自己的属性。 来看下面的例子,我们先列出基于原型链和函数伪装组合的方式实现继承完整的代码,然后再对代码中

飞鹰的专栏 535

JavaScript的类和继承

本文参考了两本书: <JavaScript: The Good Parts>(JSTGP) by Douglas Crockford <JavaScript Web Application> (JSWA) by maccman 如何在JavaScript中使用”类“,W3CSHOOL提供了一个貌似不错的解决方案,也就是所谓的PseduoClassical范式: ...

weixin_30394669的博客 77
上一篇: JavaScript继承本地对象
下一篇: javaScript属性和方法同在构造函数中(包含继承)
五月西瓜
博客等级 码龄12年 4粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值