javaScript中的自定义类型和继承

第十二篇——面向对象继承(三) 一、复习 1、类型 引用类型:int、double、decimal、char、enum、struct、bool 值类型:string、数组、自定义类 2、字符串 不可变性 大小写转换; 字符串的分割; 从XX位置开始截取字符串XX长度的子字符串; 与char类型数组的相互转换; 基本方法: 判断字符中XX是否存在; 替换XX字符串为ZZ字符串; 判断XX在字符串中第一次/最后一次出现的位置,不存在返回-1; 删去字符串前后/字符串之前的空格/字符串之后的空格; 判断字符串是否以 阅读详情
在此只记录ECMAScript中广泛使用的认同度最高的创建自定义类型方式:组合使用构造函数模式和原型模式;

和通用的继承方式:组合继承(借用构造函数继承和原型继承的组合);

1、创建自定义类型:
             构造函数模式用于定义实例属性,原型模式用于定义共享属性和方法,
    结构就是每个实例都有自己的一份实例属性的副本又共享着对方法的引用,最大限度的节省了内存空间。
    另外此模式还支持向构造函数传递参数。

function Person(name,age,sex){
		this.name = name;
		this.age = age;
		this.sex = sex;
		this.color = [red,black];
	}
	constractor.prototype.showName = function(){
		console.log(this.name);
	}
	var person1 = new Person("Nicholas", 29, "男");
	var person2 = new Person("Greg", 27, "女");
	person1.color.push("yellow");
	alert(person1.color); //"red,black,yellow"
	alert(person2.color); //"red,black"
	alert(person1.color === person2.color); //false
	alert(person1.showName === person2.showName); //true
           在这个例子中,实例属性都是在构造函数中定义的,而由所有实例共享的方
法 showName()则是在原型中定义的。而修改了 person1.color(向其中添加一个新字符串),并不
会影响到 person2.color,因为它们分别引用了不同的数组。

2、组合继承
         组合继承(combination inheritance),有时候也叫做伪经典继承,指的是将原型链和借用构造函数的
技术组合到一块,从而发挥二者之长的一种继承模式。其背后的思路是使用原型链实现对原型属性和方
法的继承,而通过借用构造函数来实现对实例属性的继承。这样,既通过在原型上定义方法实现了函数
复用,又能够保证每个实例都有它自己的属性。

function SuperType(name){
this.name = name;
this.colors = ["red", "blue", "green"];
}
SuperType.prototype.sayName = function(){
alert(this.name);
};
function SubType(name, age){
//继承属性
SuperType.call(this, name);
this.age = age;
}
//继承方法
SubType.prototype = new SuperType();

SubType.prototype.constructor = SubType;//constructor属性是对象内建的属性,存放在对象的prototype对象中。当对象的prototype被重新赋值后为了保证此属性的正确性,需手动修改constructor属性的值
SubType.prototype.sayAge = function(){
alert(this.age);
};
var instance1 = new SubType("Nicholas", 29);
instance1.colors.push("black");
alert(instance1.colors); //"red,blue,green,black"
instance1.sayName(); //"Nicholas";
instance1.sayAge(); //29
var instance2 = new SubType("Greg", 27);
alert(instance2.colors); //"red,blue,green"
instance2.sayName(); //"Greg";
instance2.sayAge(); //27
            在这个例子中, SuperType 构造函数定义了两个属性: name 和 colors。 SuperType 的原型定义
了一个方法 sayName()。 SubType 构造函数在调用 SuperType 构造函数时传入了 name 参数,紧接着
又定义了它自己的属性 age。然后,将 SuperType 的实例赋值给 SubType 的原型,然后又在该新原型
上定义了方法 sayAge()。这样一来,就可以让两个不同的 SubType 实例既分别拥有自己属性——包
括 colors 属性,又可以使用相同的方法了。

深度实例讲解JS中的继承 深度实例详解JS中继承的实现方式,包括多继承的实现。 阅读详情

相关推荐

汽车LED驱动芯片TPS92682-Q1 SPI接口配置与调试实战指南

SPI(串行外设接口)作为一种高速、全双工的同步串行通信总线,广泛应用于微控制器与外围设备之间的数据交换。其工作原理基于主从架构,通过时钟、数据线和片选信号实现设备间的精准时序控制。在汽车电子和工业控制领域,SPI因其简单高效、易于扩展的特性,成为配置复杂电源管理芯片、传感器和存储器的关键技术。通过SPI接口,工程师能够动态调整设备参数、实时读取状态信息,并实现复杂的故障诊断与保护策略,极大地提升了系统的灵活性与可靠性。本文以汽车级双通道LED恒流驱动器TPS92682-Q1为例,深入解析如何通过SPI接口

weixin_29185493的博客 288

C# 基础总结--类型与继承

基础是基石,与架构也拥有同等重要的位置,基础需要不断的温习,不断的总结,然后才能提升为自己独特的理解,每一次温习是一个查漏的过程,更是一个对语言的理解提升的过程。先不看C#中新增的LINQ,也不管反射机制与泛型的运用,先来看看最基本的类型与继承。         任何一门语言都有很多的基础元素,变量、表达式、语句、符号、标识、关键字所组成,然后再在这个基础之上定义各种规则以及高级应用,如继承、接

wyxhd2008的专栏 1198

QCustomPlot实战:从入门到精通的数据可视化

本文详细介绍了如何使用QCustomPlot进行数据可视化,从基础环境搭建到高级图表定制,涵盖实时监控、多坐标系联动等实战技巧。基于Qt的QCustomPlot库以其强大的绘图能力和灵活的API,帮助开发者快速实现专业级数据可视化效果。

weixin_29003437的博客 115

数组与继承

1.概念:在Java中,数组是一种引用数据类型,用于存储相同类型的多个元素。每个数组都有一个固定的长度,必须在创建数组时指定。Java中的数组可以存储基本数据类型(如整数、浮点数等)和对象(如字符串、自定义类等)。

Komorebian的博客 311

告别Vysor!用Scrcpy在Mac上无线投屏安卓手机(附魅族16th闪退修复实战)

本文详细介绍了如何在Mac上配置和使用开源投屏工具Scrcpy,实现安卓手机无线投屏的高效解决方案。从基础环境准备到高级功能调优,包括无线连接配置、输入控制增强、多设备管理和性能优化等实用技巧,特别针对魅族16th等机型的闪退问题提供了修复方案,帮助用户彻底告别Vysor等商业软件。

weixin_28712661的博客 396

Matlab实战:手把手教你用Zernike多项式模拟光学像差(附完整代码)

本文详细介绍了如何在Matlab中使用Zernike多项式模拟光学像差,包括基础理论、不同排序系统的实现、完整代码示例以及高级应用技巧。通过Zernike多项式,可以有效地描述和分析光学系统中的波前畸变,适用于望远镜校正、眼科光学等多个领域。

weixin_42523720的博客 161

C++的学习笔记(第四章:数组及自定义类型)

目录 数组 枚举类型 结构类型 联合类型 正文 一。数组:定义数组:注意点:数组对sizeof的使用;还有对传递后的数组的使用。                                            注意区分数组和字符串。【主要有两点区别 1:字符数组的结尾必须搞个'\0'(ascall码值为0);2.数组可以实现定位这个功能】            数组的

weixin_41070748的博客 535

AXI VIP配置全指南:从报错到成功仿真的完整流程(Vivado 2023版)

本文详细解析了在Vivado 2023环境中配置AXI Verification IP(VIP)进行协议仿真的完整流程。针对常见的include和import报错问题,提供了具体的解决方案和代码示例,指导用户从IP核创建、参数化配置,到构建可工作的仿真测试平台,最终实现成功仿真。

gpt4scribbler的博客 235

js面向对象(三):判断是否为数组类型 以及自定义继承

判断一个对象是不是数组类型,有几种方法: 4种 0. typeof X 1. 判断原型对象: obj.__proto__==Array.prototype 问题: __proto__是内部属性,可能不允许使用 Object.getPrototypeOf(obj)==Array.prototype 问题: 只...

qq_37899792的博客 442

【Codesys】获取从站信息,判断是否从站断联,总线丢失

获取EtherCAT从站信息,判断是否从站断联,总线丢失

qq_35316470的博客 5733

STM32F401RCT6最小系统原理图设计

STM32F401RCT6最小系统原理图设计一、主控芯片二、电源电路三、晶振电路三、下载电路四、完整电路图      本文章基于STM32F401RCT6进行最小系统原理图设计,包含主控芯片,电源,晶振电路,下载电路等几部分 一、主控芯片 主控芯片采用STM32F401RCT6,需注意: VBAT在不接电池的情况下需接3.3V,VDDAVREF+需接3.3V,否则会造成芯片供电不正常,无法启动和识别的情况 VDDAVREF+和VCAP1处电容需按照规格书

weixin_43278295的博客 2万+

JavaScript实现继承之原型式继承

什么是原型式继承 借助原型可以基于已有的对象创建新对象,同时还不必因此创建自定义类型。 例如: function object(o){ function F(){} F.prototype = o; return new F(); } var person = { name: "Nicholas", friends: ["Shelby", "Court", "Van"] }; var an

cake_eat的博客 142

基于双向GRU LSTM DNN水电站水文数据的每日径流量预测 完整代码+数据 可直接运行

基于双向GRU LSTM DNN水电站水文数据的每日径流量预测 完整代码+数据 可直接运行

1902

JS 对象模式和继承(部分)

该文章知识点源于《JS高级程序设计 第三版》 用于面试的整理 关于Instance和typeof JS中基本数据类型记忆法:USONB(除了object,其他都存储在内存栈中) U:undefined S:string symbol O:object N:null(属于object类型,typeof判断得到的结论) number B:boolean 关于null和undefined: null表示"没有对象",即此处不应该有值。 undefined表示“缺少值” 即此处应该有一个对象,但是还没有定义

a843485517的博客 206

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

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

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Js中的对象、构造函数、原型、原型链及继承

在传统的面向过程的程序设计中,会造成函数或变量的冗余。而JS中对象的目的是将所有的具有相同属性或行为的代码整合到一起,形成一个集合,这样就会方便我们管理,例如: 以上的例子将name、age、showMessage放进person1这个对象中,方便了我们的管理同时也减少了我们的命名困难。我们下面的讲解会用到的基本知识点:1)、内存会对每一个对象一个内存空间;2)、函数也是一个对象。每一个对象都会占据一定的内存空间。以上可以看出对象的产生方便了我们的代码管理,但是又产生了一个问题,如果我又定义了一个对象per

小王的技术库 142

WINCC7.3破解文件

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

面向对象的JS(1) Java和JavaScript的比较

Java和JavaScript在面向对象方面的比较   Java JavaScript 静态类型 动态类型 自定义类型可以是类,接口或枚举定义 自定义类型由函数或原型定义 类型不可在运行时改变 类型可在运行时改变 定义变量需要声明具体类型(强类型) 定义变量不需要声明具体类型(弱类型) 构造器是具体的方法 构造器只是一个函数,构造器与函数之间...

Jobar's life 248

VC中sqlite的使用

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

js 原型 继承

自定义类型 简单的说 prototype 就是我们定义的类Person 的一个属性,这个属性prototype是一个对象 ,对象的所有属性name age和speak方法 都会被我们定义的这个类Person 所创建的对象(或说成自定义类的实例)new Person 共享。 相当于类的公共属性和方法。 原型模式。在我们声明一个新的函数后,该函数(在JavaScript中,函数也是对象)就...

weixin_30426065的博客 67

【JavaScript】js中的原型继承

js中的原型继承

南栀的博客 3705

javascript:原型链继承和构造函数继承

原型链继承 子类的所有实例都共享着原型上的所有属性和方法。通过子类实例,可以访问原型上的属性,但是,不能重写原型上的属性。 //定义一个学生类 function Student(stuID, schoolName) { this.stuID = stuID; this.schoolName = schoolName; } ...

weixin_33720452的博客 243

JavaScript中的原型继承和类继承之间的区别

深入探索JavaScript的原型继承和类继承,不仅可以加深你对这门语言的理解,还能为构建复杂的应用程序打下坚实的基础。随着经验的积累和技术的进步,你会发现自己在面对不同类型的项目时,能够更加自信地选择最适合的解决方案。同时,持续关注ECMAScript的发展趋势,掌握最新的特性和最佳实践,也将有助于你在竞争激烈的Web开发领域保持领先地位。希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。原型继承是JavaScript最原始也是最核心的继承方式。

一个做过前端开发的产品经理,经历过睿智产品的折磨导致脱发之后,励志要翻身"农奴"把歌唱,一边打入敌人内部一边持续提升自己,为我们广大开发同胞谋福祉,坚决抵制睿智产品折磨我们码农兄弟! 1145

js中的继承详解

js中的继承 假设我们有一个Animal类,我们想构造Cat类,Cat类可以继承Animal类的属性和方法。以这个场景为列,我来讲一讲我所理解的js的继承。 构造继承 function Animal(name){ this.name = name; this.age = 15; } function Cat(name){ Animal.call(this, name); th...

izwell的博客 2329

javascript中的继承(JS基于原型链的继承),以及JS中的call和apply函数

继承是面向对象编程语言的一个重要特性,比如JAVA中,通过extend可以实现多继承,但是javascript中的继承方式跟JAVA中有很大的区别,JS中通过原型链的方式实现继承。

liwusen的博客 1913

js中的继承和闭包的学习

js中含有继承,但不是extends关键字来实现继承的,怎样实现呢?先看一下代码: function Stu(name, age) { this.name = name; this.age = age; this.show = function() { window.alert(this.name + " " + this.age); } }

youyajie的专栏 4765

javascript中的继承方式

让一个构造函数去继承另一个构造函数的属性和方法 继承是发生在两个构造函数之间 是与构造函数相关的应用 1.原型对象(prototype)继承 优点:简单,方便,易操作 缺点: 不能继承构造函数里的属性和方法 只能继承原型对象身上的属性和方法 function Parent(){ this.name = "admin"; this.sayHi = function(){ console.log("hi"); } } Parent.prototype.show = function(){.

anr_safely的博客 944

子类继承父类的所有属性和方法_js中的继承问题

面向对象编程很重要的一个方面,就是对象的继承。A 对象通过继承 B 对象,就能直接拥有 B 对象的所有属性和方法。这对于代码的复用是非常有用的。大部分面向对象的编程语言,都是通过“类”(class)实现对象的继承。传统上,JavaScript 语言的继承不通过 class(ES6 引入了class 语法),而是通过“原型对象”(prototype)实现。那么在JS中常见的继承方式有几种呢?方式一、...

weixin_39581995的博客 1493

JavaScript中的类和继承

文章目录JavaScript中的类和继承类工厂模式构造函数模式原型模式[常用]组合使用构造函数模式和原型模式动态原型模式寄生构造函数模式稳妥构造函数模式es6的类继承原型链继承借用构造函数继承[常用]组合继承原型式继承寄生式继承[常用]寄生组合式继承es6的继承行为委托模式 JavaScript中的类和继承 类 工厂模式 function createPerson(name, age, job) ...

azurecho 218
上一篇: jquery on方法详解
下一篇: HTML5Web Workers
五月西瓜
博客等级 码龄12年 4粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值