构造函数的原型和原型链

转载 https://blog.csdn.net/weixin_44976833/article/details/101322081

构造函数和原型和原型链

1.静态成员和实例成员

1.1静态成员

静态成员在构造函数本身上添加的成员,静态成员只能通过构造函数来访问

function Person(name,age){this.name = name;this.age = age;
}
//sex就是静态成员
Person.sex = '男';
var one = new Person('小明',12);
console.log(Person.sex);  //静态成员只能通过构造函数来访问

1.2实例成员

实例成员就是构造函数内部通过this添加的成员,实例成员只能通过实例化的对象来访问;

//nam,age,study就是实例成员
function Person(nam,age){this.nam = nam;this.age = age;this.study = function(){console.log('我再认真学习js');}
}
var one = new Person('小明',12);
console.log(one.study);  //实例成员只能通过实例化对象来访问

 

2.构造函数原型prototype


构造函数通过原型分配的函数是所有对象所共享的,规定每一个构造函数都有一个prototype属性,指向另一个对象,这个prototype就是一个对象,这个对象的所有属性和方法,都会被构造函数所拥有的,可以把那些不变的方法直接定义在prototype对象上,这样所有对象的实例就可以共享这些方法;

 

3.对象原型__proto__

 

1.对象都会有一个属性__proto__ 指向构造函数的prototype原型对象,之所以我们对象可以使用构造函数prototype原型对象的属性和方法,就是因为对象有__prorto__原型的存在;

2.__proto__对象原型和原型对象prototype是相等的;

3.__proto__对象原型的意义就是在于为对象查找机制提供一个方向,但是它是一个非标准属性,实际开发中不可以使用这个属性,它只是内部指向原型对象prototype;

 

4.constructor构造函数


1.对象原型__proto__和构造函数prototype原型对象里面都有一个属性constructor属性,constructor称为构造函数,因为它指回构造函数本身;

2.constructor主要是用于记录该对象引用于哪个构造函数,它可以让原型对象重新指向原来的构造函数;

3.一般情况下,对象的方法都在构造函数的原型对象中设置,如果有多个对象方法,我们可以给对象采用对象形式赋值,但是这样就会覆盖构造函数原型对象原来的内容,修改后的原型对象constructor就不在指向当前构造函数,此时可以在修改后的原型对象中,添加一个constructor指向原来的构造函数

 function Person(uname, age) {this.uname = uname;this.age = age;}// 很多情况下,我们需要手动的利用constructor 这个属性指回 原来的构造函数
Person.prototype = {// 如果我们修改了原来的原型对象,给原型对象赋值的是一个对象,则必须手动的利用constructor指回原来的构造函数// 手动设置指回原来的构造函数constructor: Person, sing: function() {console.log('我唱歌很好听');},study: function() {console.log('我正在学习js');}
}
var one = new Person('小明', 18);

 

5.构造函数实例和原型对象三角关系


1.构造函数的prototype属性指向了构造函数原型对象;

2.实例对象是由构造函数创建的,实例对象的__proto__属性指向了构造函数的原型对象;

3.构造函数的原型对象的constructor属性指向了构造函数,实例对象原型的constructor属性也指向了构造函数;

 

6.原型链和成员的查找机制


任何对象都有原型对象,也就是prototype属性,任何原型对象也是一个对象,该对象有__proto__属性,这样一层一层往上找,就会形成一条链,原型链;

1.当访问一个对象的属性(包括方法)时,首先查找这个对象自身有没有该属性。

2.如果没有就查找它的原型(也就是 __proto__指向的 prototype 原型对象)。

3.如果还没有就查找原型对象的原型(Object的原型对象)。

4.依此类推一直找到 Object 为止(null)。

5.__proto__对象原型的意义就在于为对象成员查找机制提供一个方向,或者说一条路线。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/511199.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

redis + lua实现分布式接口限流实现方案

作者 | 步尔斯特来源 | 步尔斯特前言redis lua脚本已然成为了单体项目主流的限流方案。redis凭借其特性成为了中间件的佼佼者,最新官方测试数据:读的速度是110000次/s写的速度是81000次/s。lua:减少网络开销:使用Lua脚本&#xf…

微服务用户为什么要用云原生网关

简介:下文将为你解说云原生网关如何助你解决一系列痛点,优雅玩转云上微服务架构升级。 作者:百丈 随着云原生技术的发展,微服务的架构选型也是日新月异。在 Kubernetes 重塑运维体系的云时代,我们在安全、降本提效、…

15 分钟实现企业级应用无损上下线

简介:很多用户量大并发度高的应用系统为了避免发布过程中的流量有损,一般选择在流量较小的半夜发布,虽然这样做有效果,但不可控导致背后的研发运维成本对企业来说是一笔不小的负担。基于此,阿里云微服务引擎 MSE 在应用…

class 类

【基础认知】 1、构造器中的this指向——类的实例对象 2、类中的构造器不是必须写的,要对实例进行一些初始化的操作,如添加指定属性时才写。 3、如果A类继承了B类,且A类中写了构造器,那么A类构造器中的super时必须要调用的。 4、类…

Azure语音合成再添新声音,“风格迁移”技术为不同音色实现多情感演绎

微软Azure Neural TTS(神经网络版文本转语音)新增五种声音模型,让我们再次体会到了“风格迁移”技术对AI语音模型多情感多风格的强大支持。 此次更新的五个美式英语声音模型,包括青春甜美的Jane、低沉温和的Nancy、随性且精力充沛…

基于 Observable 构建前端防腐策略

简介:To B 业务的生命周期与迭代通常会持续多年,随着产品的迭代与演进,以接口调用为核心的前后端关系会变得非常复杂。在多年迭代后,接口的任何一处修改都可能给产品带来难以预计的问题。在这种情况下,构建更稳健的前端…

动态卡片:富媒体内容井喷式增长下,新一代移动端动态研发的模式

简介:「蚂蚁动态卡片」新品发布会全程回顾 在 iOS 和 Android 系统近期推送的更迭版本中,系统环境已经逐渐发展出了将部分内容和服务前置化展示的趋势。 同时,伴随着富媒体内容井喷式增长以及内容的多样化、年轻化,一款移动应用…

Windows 上创建的文件,上传到 Linux 服务器,文件名乱码?

作者 | 刘光录来源 | TIAP先来说一下问题,在 Windows 下创建的一系列文件,上传到 Linux 服务器后,出现文件名乱码,导致文件无法读取的情况。事情的起因是这样的...最近有这样一个需求:在Java Web工程中读取本地某一个文…

阿里云成为首个通过“虚拟化云平台性能测试(大规模)”的云厂商

简介:2021年7月27日,在可信云大会上,中国信息通信研究院发布了《虚拟化云平台性能评估方法》,同时,宣布了阿里云成为首个通过“虚拟化云平台性能测试(大规模)”的云厂商,并获得“202…

阿里云神龙团队拿下TPCx-BB排名第一的背后技术

简介:阿里云自主研发的神龙大数据加速引擎获得了TPCx-BB SF3000世界排名第一的成绩。 一 背景介绍 近日,TPC Benchmark Express-BigBench(简称TPCx-BB)公布了最新的世界排名,阿里云自主研发的神龙大数据加速引擎获得了TPCx-BB SF3000排名第…

从中国移动财报透视:什么在支撑移动云发展韧性?

8 月 11 日,中国移动公布 2022 年中期业绩报告。报告显示,上半年中国移动营运收入达人民币 4969 亿元,同比增长 12.0%。净利润 703 亿元,同比增长 18.9%,盈利能力全球领先。其中,移动云收入达人民币 234 亿…

vue 前期准备,项目结构

环境 1、node -v 检测 没有就下载node,装到C盘 http://nodejs.cn/download/ 2、vue -v 检测 没有就 npm install -g vue/cli 或者 yarn global add vue/cli 安装脚手架 网址 https://cli.vuejs.org/zh/ 也可以从网址里找到…

如何设计一个复杂的业务系统?从对领域设计、云原生、微服务、中台的理解开始

简介:业级应用架构是在不断的演进和迭代,但是我始终感觉企业应用架构的形成过程是在一种看起来科学的方法论下,但是又不完全科学的过程中实现的。 作者:焦方飞 大年初一,看完中国队 1:3 越南队的比赛,在思…

构建、运行、增长,亚马逊云科技发布游戏行业解决方案

云计算除了为游戏提供底层基础设施的IT资源,还能做什么? 编辑 | 宋慧 出品 | CSDN云计算 在全球游戏发展重塑的过程中,中国已经成为全球最大的数字游戏市场,Data.ai发布2022年Level Up全球52强排行榜里,有17家游戏和公…

如何从容应对复杂性

简介:软件的复杂性,是一个很泛的概念。但是一直都是开发过程中的一个难题,本文旨在探讨如何去从容应对复杂性。 作者 | 無涯 来源 | 阿里技术公众号 软件的复杂性,是一个很泛的概念。 但是一直都是开发过程中的一个难题&#xf…

js判断数据类型的几种方式

typeof 对于基本类型,除 null 以外,均可以返回正确的结果。对于引用类型,除 function 以外,一律返回 object 类型。对于 null ,返回 object 类型。对于 function 返回 function 类型。 typeof; // string 有效 typeo…

阿里巴巴开源大规模稀疏模型训练/预测引擎DeepRec

简介:经历6年时间,在各团队的努力下,阿里巴巴集团大规模稀疏模型训练/预测引擎DeepRec正式对外开源,助力开发者提升稀疏模型训练性能和效果。 作者 | 烟秋 来源 | 阿里技术公众号 经历6年时间,在各团队的努力下&#…

产学融合如何促进技术创新,英特尔打了个样

作者 | 宋慧 出品 | CSDN 经过多年的积累与扎实科研,中国的科学与技术水平正在达到和超越世界一线水平。这离不开中国有基数庞大的用户和应用场景,为科学界和工业界提供了将理论付诸实践的机会,反复打磨迭代,以提升技术指标。 作…

3大能力升级,云效+钉钉,让研发协作更「敏捷」

简介:你的团队是否面临如下问题:没有敏捷经验,不知道如何落地敏捷或者敏捷实施不规范?研发交付过程信息更新不及时,无法及时跟进交付结果?员工入职离职,多套账号权限管理难?缺乏交付…