当前位置: 首页 > article >正文

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_ _去父对象中查找!

 

相关文章:

32、构造函数

1、用构造函数反复创建多个相同结果的对象 问题 如果想反复创建多个相同结构&#xff0c;但是内容不同的对象时&#xff0c;用{}创建会代码重复&#xff0c;及其不便于维护&#xff01; 解决 今后只要想反复创建同一类型的多个相同结构不同内容的对象时&#xff0c;都用构造函…...

编程环境搭建专栏目录汇总

1.WindowsvscodeclineMCP配置 2. Cline使用openrouter报错&#xff1a;Error Unexpected API Response: The language model did not provide any assista...

app.config.globalProperties

目录 一:基础使用 1、简介 2、使用 3、打印结果: 二:封装 1、创建一个.ts文件(utils/msg.ts) 2、在main.ts中全局注册 3、在页面中使用 4、打印结果 一:基础使用 1、简介 app.config.globalProperties 是 Vue 3 应用实例&#xff08;app&#xff09;的一个配置属性&…...

C# GeneticSharp包

可以直接从nuget安装GeneticSharp包 GeneticSharp 遗传算法类库 GeneticSharp 是什么 GeneticSharp 是一个C#的遗传算法类库, 遗传算法Java著名的JMetal, Python也有JMetalPy和PyMoo, C#相对差一截, 稍微有名的是GeneticSharp库. GeneticSharp 的弱点: 不支持多目标优化没…...

Leetcode做题记录----3

1474、删除链表M个节点之后的N个节点 思路&#xff1a; 1、两个循环解决问题 第一个循环移动M个位置&#xff0c;第二个循环确定移动N个位置后的&#xff0c;然后将M位置的节点的next指向&#xff0c;N位置后的节点即可 2、注意边界条件和判空处理 代码实现&#xff1a; pub…...

React(二):JSX语法解析+综合案例

事件绑定 this绑定方式 问题&#xff1a;在事件执行后&#xff0c;需获取当前类的对象中相关属性&#xff0c;此时需要this——当打印时&#xff0c;发现this为undefined,这又是为啥&#xff1f; 假设有一个btnClick函数&#xff0c;但它并不是我们主动调用的&#xff0c;而是…...

Gitee重新远程连接仓库(Linux)

Gitee重新远程连接仓库&#xff08;Linux&#xff09; 因为虚拟机重新安装了一回&#xff0c;所以需要重新和远程仓库连接&#xff0c;在网上找了很久没有找到相关操作&#xff0c;自己实操成功&#xff0c;记录下本博客&#xff0c;帮助有需要的人 确保新虚拟机安装Git 在新虚…...

Vitis HLS中的Array Partition与Array Reshape详解

Vitis HLS中的Array Partition与Array Reshape详解 引言 在高层次综合(HLS)设计中&#xff0c;数组是最常用的数据结构之一&#xff0c;但默认情况下&#xff0c;HLS会将数组映射到单个BRAM块&#xff0c;这会限制并行访问能力&#xff0c;成为性能瓶颈。为了克服这一限制&am…...

Centos离线安装openssl

文章目录 Centos离线安装openssl1. openssl是什么&#xff1f;2. openssl下载地址3. openssl-devel安装4. 安装结果验证5. 版本查看 Centos离线安装openssl 1. openssl是什么&#xff1f; OpenSSL 是一个开源的、跨平台的 加密工具库 和 命令行工具集&#xff0c;广泛用于实现…...

protobuf安装

安装 github官方链接 https://github.com/protocolbuffers/protobuf/ 以protobuf21为例 https://github.com/protocolbuffers/protobuf/releases/download/v21.11/protobuf-all-21.11.zip windows 解压好文件夹后,使用cmake,vs,qt creator等工具打开该项目,进行编译,编译需…...

《基于超高频RFID的图书馆管理系统的设计与实现》开题报告

一、研究背景与意义 1.研究背景 随着信息化时代的到来&#xff0c;运用计算机科学技术实现图书馆的管理工作已成为优势。更加科学地管理图书馆会大大提高工作效率。我国的图书管理体系发展经历了三个阶段&#xff1a;传统图书管理模式、现代图书管理模式以及基于无线射频识别&…...

小程序渲染之谜:如何解决“加载中...”不消失的 Bug(glass-easel)

&#x1f389; 小程序渲染之谜&#xff1a;如何解决“加载中…”不消失的 Bug &#x1f389; 引言 在小程序开发中&#xff0c;渲染问题总能让人抓狂。&#x1f62b; 这次&#xff0c;我遇到了一个奇怪的 bug&#xff1a;产品详情页的内容已经正常显示&#xff0c;但页面却一…...

在 React 中使用 Web Components 的实践操作

前言 在现代前端开发中&#xff0c;React 和 Web Components 都是广泛使用且备受欢迎的技术。React 是一个用于构建用户界面的 JavaScript 库&#xff0c;提供了组件化的开发方式和高效的状态管理&#xff0c;而 Web Components 是一套原生的浏览器技术标准&#xff0c;允许开…...

网络原理之HTTPS(如果想知道网络原理中有关HTTPS的知识,那么只看这一篇就足够了!)

前言&#xff1a;随着互联网安全问题日益严重&#xff0c;HTTPS已成为保障数据传输安全的标准协议&#xff0c;通过加密技术和身份验证&#xff0c;HTTPS有效防止数据窃取、篡改和中间人攻击&#xff0c;确保通信双方的安全和信任。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要…...

五子棋小游戏-简单开发版

一、需求分析 开发一个基于 Pygame 库的五子棋小游戏&#xff0c;允许两名玩家在棋盘上轮流落子&#xff0c;当有一方达成五子连珠时游戏结束&#xff0c;显示获胜信息&#xff0c;并提供退出游戏和重新开始游戏的操作选项。 1.棋盘显示 &#xff1a; 显示一个 15x15 的五子棋…...

node-sass替换成Dart-sass(全是坑)

改了好久&#xff0c;人都改傻了&#xff0c;我是用的node&#xff1a;14.21.3&#xff0c;vue&#xff1a;2.5.2&#xff0c;webpack": "^3.12.0" 还好最后成功了&#xff0c;不然还准备要升级webpack版本试试&#xff0c;但/deep/换成::v-deep,人要死&#xf…...

2025中国科技大学少年班/创新试点班·初试备考测试卷(数学)

本卷考查内容&#xff1a;高中课程内容及拓展。 本卷考查形式&#xff1a;书面作答&#xff08;客观题18小题解答题4题&#xff09;。 卷首语&#xff1a;中科大少年班、创新班每年大规模招录在数理成绩优异的中学学生。其中初试数学题在高考基础上略有拓展&#xff0c;难度又低…...

即时通讯平台测试报告

1.项目概述 项目名称&#xff1a;即时通讯平台 版本号&#xff1a;V1.0.0 测试周期&#xff1a;2025年2月25日--2025年3月15日 测试目标&#xff1a;验证核心功能&#xff08;登录、注册、消息收发、用户管理、群组功能等&#xff09;的稳定性和性能指标。 2. 测试范围 功…...

如何记录Matlab程序运行过程中所占用的最大内存

有些时候&#xff0c;我们需要分析Matlab程序运行过程中所占用的最大内存。如果只是得到程序运行到当前位置所占用的内存&#xff0c;可以简单在程序当前位置插入memory命令即可&#xff1a; user memory; MemUsed_now user.MemUsedMATLAB; 但如果我们想要的是整个程序在运行…...

WIN11开发环境变量记录

这里写自定义目录标题 总图JAVA环境变量配置GIT环境变量配置NODEJS环境变量配置 总图 JAVA环境变量配置 新建系统变量。变量名&#xff1a;JAVA_HOME&#xff0c;变量值&#xff08;可以选择浏览目录&#xff0c;JAVA的根目录&#xff0c;本处为D:\Java\jdk1.8.0_251&#xff…...

易语言模拟真人鼠标轨迹算法

一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序&#xff0c;它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言&#xff0c;原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势&#xff1a; 模拟…...

洛谷P9950 [USACO20FEB] Mad Scientist B

P9950 [USACO20FEB] Mad Scientist B - 洛谷 代码区&#xff1a; #include <iostream> #include <string>using namespace std; int main() {int n;cin>> n;string a;string b;cin >> a >> b;int flag,step0,i,t;for ( i 0; i < a.length(…...

【人工智能基础2】Tramsformer架构、自然语言处理基础、计算机视觉总结

文章目录 七、Transformer架构1. 替代LSTM的原因2. Transformer架构&#xff1a;编码器 - 解码器架构3. Transformer架构原理 八、自然语言处理基础1. 语言模型基本概念2. 向量语义3. 预训练语言模型的基本原理与方法4. DeepSeek基本原理 九、计算机视觉 七、Transformer架构 …...

prometheus自定义监控(pushgateway和blackbox)和远端存储VictoriaMetrics

1 pushgateway采集 1.1 自定义采集键值 如果自定义采集需求时&#xff0c;就可以通过写脚本 定时任务定期发送数据到 pushgateway 达到自定义监控 1.部署 pushgateway&#xff0c;以 10.0.0.42 节点为例 1.下载组件 wget https://github.com/prometheus/pushgateway/relea…...

设计模式之组合模式:原理、实现与应用

引言 组合模式&#xff08;Composite Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许你将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得客户端可以统一对待单个对象和组合对象&#xff0c;从而简化了客户端代码。本文将深入探讨组合模式的原理…...

数字化转型 - 数据驱动

数字化转型 一、 数据驱动1.1 监控1.2 分析1.3 挖掘1.4 赋能 二、数据驱动案例2.1 能源工业互联网&#xff1a;绿色节能的数字化路径2.2 光伏产业的数字化升级2.3 数据中心的绿色转型2.4云迁移的质效优化2.5 企业数字化运营的实践2.6数字化转型的最佳实践 一、 数据驱动 从数…...

C++相关基础概念之入门讲解(上)

1. 命名空间 C中的命名空间&#xff08;namespace&#xff09;是用来避免命名冲突问题的一种机制。通过将类、函数、变量等封装在命名空间中&#xff0c;可以避免不同部分的代码中出现相同名称的冲突。在C中&#xff0c;可以使用namespace关键字来定义命名空间。 然后我们在调…...

【数学建模】层次分析法(AHP)详解及其应用

层次分析法(AHP)详解及其应用 引言 在现实生活和工作中&#xff0c;我们经常面临复杂的决策问题&#xff0c;这些问题通常涉及多个评价准则&#xff0c;且各准则之间可能存在相互影响。如何在这些复杂因素中做出合理的决策&#xff1f;层次分析法(Analytic Hierarchy Process…...

【大模型】Transformer、GPT1、GPT2、GPT3、BERT 的论文解析

前言 在自然语言处理&#xff08;NLP&#xff09;和深度学习的快速发展中&#xff0c;Transformer模型和 GPT系列模型扮演了至关重要的角色。本篇博客旨在对这些开创性的论文进行介绍&#xff0c;涵盖它们的提出时间、网络结构等关键信息&#xff0c;能够快速的理解这些模型的设…...

TCP怎么保证可靠传输

一&#xff1a;连接管理 TCP是面向连接的协议&#xff0c;在数据传输前必须通过三次握手建立连接&#xff0c;结束时必须四次挥手来终止连接。这确保双方都准备好通信。 二&#xff1a;序列号和确认应答 每个字节的数据都被分配了一个序列号&#xff0c;这允许接收方将受到的数…...