32、构造函数

1、用构造函数反复创建多个相同结果的对象

问题

如果想反复创建多个相同结构但是内容不同的对象时{}创建会代码重复,及其不便于维护!

解决

今后只要想反复创建同一类型的多个相同结构不同内容的对象时都用构造函数来创建

专门描述同一类型所有对象的同一结构的函数

如何: 2

i. 先定义构造函数

function  类型名(形参, ...){

 this.新属性名=形参; 

   ... = ... ;

   this.新方法名=function(){
   ... this.属性名 ...

          }

}

ii. 调用构造函数创建新对象

 var 新对象名=new 类型名();

优点

代码重用,便于维护!

2、new构造函数时都做了什么?


1.创建一个空对象
var obj = {};

2.链接到原型,将obj的proto指向构造函数的prototype
obj._proto = 类名._prototype;

4.绑定this值,让function函数的this指向obj,并执行函数体
类名.call(obj);

5.返回这个对象

3、构造函数的问题

如果将方法的定义放在构造函数内每调用一次构造函数创建一个新对象都会反复创建相同的方法的副本!——浪费内存

今后,所有多个子对象共用的属性值或方法定义都要添加到原型对象中: 强行赋值

构造函数.prototype.新成员=新值。

<script>//定义构造函数描述所有学生对象的同一结构function Student(sname, sage){this.sname=sname;this.sage=sage;//构造函数中不要包含方法定义!}//输出Student类型的原型对象console.log(Student.prototype);//向Student的原型对象中强行添加新共有方法Student.prototype.intr=function(){console.log(`I'm ${this.sname}, I'm ${this.sage}`)}console.log(Student.prototype);//反复调用构造函数创建lilei和hmmvar lilei=new Student("Li Lei",11);var hmm=new Student("Han Meimei",12);//亲子鉴定   console.log(//李磊的 爹     是不是Student的老公lilei.__proto__==Student.prototype);//trueconsole.log(//李磊的爹    是不是hmm的爹lilei.__proto__==hmm.__proto__);//trueconsole.log(lilei);console.log(hmm);lilei.intr();hmm.intr();
</script>

注:根据 ES6 规范,箭头函数不能用作构造函数,使用new调用会抛出错误。其次,箭头函数是否有prototype属性?没有,普通函数才有prototype属性,箭头函数没有,所以person.prototypeundefined,无法添加方法。

4、自有属性和共有属性

a. 自有属性: 保存在当前对象自身内部的属性,只归当前对象自己所有的属性。今后,凡是构造函数中this.后的属性,都会成为自对象的自有属性

b. 共有属性: 保存在原型对象/父对象中的,归多个子对象共有的属性

c. 获取属性值: 无论自有属性,还是共有属性,都可用: 子对象.属性名

d. 修改属性值

1). 修改自有属性的值: 子对象.属性名=属性值

2). 修改共有属性的值: 

   i. 错误: 子对象.共有属性=属性值

   如果强行给子对象不存在的属性赋值不会去原型对象中查找属性。而是自动给当前子对象自己添加一个新属性。

    如果新属性与原型对象中的属性同名按就近原则只要访问子对象.属性名时,永远只能使用自己自有的属性。不在去原型对象中查找。

   ii. 正确: 只要想修改原型对象中共有的属性都必须用原型对象来修改: 构造函数.prototype.共有属性=属性值

5、原型链

a. 什么是: 由多级父对象/原型对象逐级继承,形成的链式结构

b. 保存着: 一个对象可用的所有属性和方法!

c. 控制着: 对象属性和方法的使用顺序: 就近原则

 1). 优先在当前对象内部查找自有属性

   2). 当前对象内部没有想要的属性,才自动延_ _proto_ _去父对象中查找!

 

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

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

相关文章

地下停车场调频广播覆盖:破解地下车库无线广播收听孤岛,技术赋能地下停车场FM调频无线广播覆盖

地下停车场调频广播覆盖&#xff1a;破解地下车库无线广播收听孤岛&#xff0c;技术赋能地下停车场FM调频无线广播覆盖 北京海特伟业科技有限公司任洪卓于2025年3月14日发布 地下停车场调频广播覆盖系统建设背景 随着城市化进程的加速&#xff0c;地下停车场已成为现代建筑不…

kettle的转换中sql不按设计顺序执行原因分析与解决办法

1.问题描述 如图&#xff0c;通过箭头指定多个SQL脚本的先后顺序&#xff0c;实际各个sql没有阻塞&#xff0c;没有等待&#xff0c;几乎是并行&#xff0c;与预期不符。 2.原因 转换文件&#xff08;.ktr&#xff09; 用于控制数据的流量&#xff0c;比如表输入指向表输出节…

P1259 黑白棋子的移动【java】【AC代码】

有 2n 个棋子排成一行&#xff0c;开始为位置白子全部在左边&#xff0c;黑子全部在右边&#xff0c;如下图为 n5 的情况&#xff1a; 移动棋子的规则是&#xff1a;每次必须同时移动相邻的两个棋子&#xff0c;颜色不限&#xff0c;可以左移也可以右移到空位上去&#xff0c;但…

P6772 [NOI2020] 美食家

训练角度&#xff1a;图上的状态转移&#xff0c;倍增 → \rightarrow → 优化状态转移&#xff1b; ▍ 题意 精灵王国共有 n n n 座城市&#xff0c;城市从 1 1 1 到 n n n 编号&#xff0c;其中城市 i i i 的美食能为小 W 提供 c i c_i ci​ 的愉悦值。精灵王国的城市…

51c大模型~合集7

我自己的原文哦~ https://blog.51cto.com/whaosoft/11519481 #MTMamba 王座易位&#xff1f;香港科技大学MTMamba&#xff0c;超越 ViT与CNN&#xff01; 本文作者提出了MTMamba&#xff0c;一种新型的多任务架构&#xff0c;具有基于Mamba的解码器&#xff0c;在多任务场…

sap 内存管理与数据共享方式

SAP内存管理 内存是程序之间为了传递数据而使用的共享存储空间 SAP内存分类&#xff1a;1、SAP内存&#xff0c;2、ABAP内存 这两种内存都是针对同一登录用户实现数据共享。 SAP内存&#xff08;SAP Memory&#xff09;和ABAP内存&#xff08;ABAP Memory&#xff09;&…

Manus邀请码申请全流程指南(2025最新版)——申请Manus体验资格

&#x1f31f;引言&#xff1a; 近期&#xff0c;号称“全球首个通用AI智能体”的Manus引爆科技圈&#xff0c;其自主执行复杂任务的能力颠覆了传统AI工具仅能输出文本的局限。然而&#xff0c;由于内测阶段采用邀请制&#xff0c;一码难求的现状让用户直呼“门槛太高”。 名人…

Linux 命名管道

文章目录 &#x1f680; 深入理解命名管道&#xff08;FIFO&#xff09;及其C实现一、命名管道核心特性1.1 &#x1f9e9; 基本概念 二、&#x1f4bb; 代码实现解析2.1 &#x1f4c1; 公共头文件&#xff08;common.hpp&#xff09;2.2 &#x1f5a5;️ 服务器端&#xff08;s…

Python 与 sklearn 库:轻松构建 KNN 算法双版本

引言​ k 最近邻&#xff08;kNN&#xff09;算法是一种简单而强大的机器学习算法&#xff0c;常用于分类和回归任务。在 Python 中&#xff0c;借助 scikit - learn&#xff08;sklearn&#xff09;库&#xff0c;我们可以轻松实现 kNN 算法。本文将为大家介绍两种使用 sklea…

分享vue好用的pdf 工具实测

vue3-pdf-app&#xff1a; 带大纲&#xff0c;带分页&#xff0c;带缩放&#xff0c;带全屏&#xff0c;带打印&#xff0c;带下载&#xff0c;带旋转 下载依赖&#xff1a; yarn add vue3-pdf-appornpm install vue3-pdf-app 配置类&#xff1a; 创建文件 pdfConfig.ts /…

android 调用wps打开文档并感知保存事件

需求场景 在项目开发中会碰到需要调用WPS打开Word,Excel,Ppt等Office系列文档的情况&#xff0c;网上目前少有正式介绍如何调用相关API打开文档&#xff0c;并实现文档编辑后回传给三方应用&#xff0c;本人在逛WPS社区时发现 解锁WPS二次开发新世界&#xff1a;Android开发用…

HarmonyOS NEXT - 电商App实例三( 网络请求axios)

使用axios开发网络请求是一个非常常见的任务&#xff0c;尤其是Web前端开发者&#xff0c;对它非常熟悉。axios是一个基于Promise的HTTP客户端&#xff0c;支持浏览器和Node.js环境&#xff0c;使用简单且功能强大。 在harmonyOS中&#xff0c;如果想使用axios&#xff0c;可以…

19、TCP连接四次挥手的过程,为什么是四次?【高频】

四次挥手的过程 假设客户端主动发起。 第一次挥手&#xff1a;客户端向服务器 发送 FIN&#xff0c;表示 自己要断开数连接。随后&#xff0c;客户端 进入 FIN-WAIT-1 状态&#xff1b;服务器收到后&#xff0c;变为CLOSE_WAIT状态 第二次挥手&#xff1a;服务器 发送ACK 作为…

蓝桥云客 挖矿

0挖矿 - 蓝桥云课 问题描述 小蓝正在数轴上挖矿&#xff0c;数轴上一共有 n 个矿洞&#xff0c;第 i 个矿洞的坐标为 ai​。小蓝从 0 出发&#xff0c;每次可以向左或向右移动 1 的距离&#xff0c;当路过一个矿洞时&#xff0c;就会进行挖矿作业&#xff0c;获得 1 单位矿石&…

ssm:商业异常处理流程

第一步 定义全局R类制定标准 代码定义了一个通用的返回类 R<T>&#xff0c;用于封装API请求的结果&#xff0c;包括状态码、消息和数据。该类使用了Lombok的Data注解来减少样板代码&#xff08;如getter、setter方法等&#xff09;的编写。以下是代码的一些解释和建议&am…

Inficon IC5 沉积控制器 IC/5 型号

Inficon IC5 沉积控制器 IC/5 型号

农业建设项目管理系统评测:8款推荐工具优缺点分析

本文主要介绍了以下8款农业建设项目管理系统&#xff1a;1.PingCode&#xff1b; 2. Worktile &#xff1b;3. 建米农业工程项目管理系统&#xff1b;4. 开创云数字农业管理平台&#xff1b; 5. Trimble Ag Software&#xff1b;6.Conservis&#xff1b; 7. Agworld &#xff1…

大视频背景暗黑风格的wordpress企业主题免费下载

整体风格是黑色的&#xff0c;首页首屏大视频背景&#xff0c;动态效果非常好。向下滚动时&#xff0c;滚动的特效也不错。 原文 https://www.bixugao.com/wp/26.html

西门子S7-1200 PLC远程调试技术方案(巨控GRM532模块)

三步快速实现远程调试 硬件部署 准备西门子S7-1200 PLC、巨控GRM552YW-C模块及编程电脑。GRM552YW-C通过网口与PLC连接&#xff0c;支持4G/5G/Wi-Fi/有线网络接入&#xff0c;无需复杂布线。 软件配置 安装GVCOM3配置软件&#xff0c;注册模块&#xff08;输入唯一序列号与密…

系统思考:客户价值

“真正的市场竞争&#xff0c;不是比谁更能制造产品&#xff0c;而是比谁更能创造价值。” ——杰夫贝索斯 在组织辅导中&#xff0c;我经常问团队一个问题&#xff1a;“我们的客户是谁&#xff1f;”大多数人的第一反应是——“支付费用的就是客户。” 这在过去的市场扩张阶…