new一个对象

1.自己直接调用

    function Person(name, age) {this.name = name;this.age = age;}let a1 = new Person("小明", 20);let a2 = new Person("小菜", 25);console.log(a1);

打印的对象:

2.自己模拟一个

    function Person(name, age) {this.name = name;this.age = age;}function _new(r,...args){console.log(...args,123456);// 1.创建一个空对象let obj={}// 2.r代表要构造的函数obj.__proto__=r.prototype// 3.改变this的指向const t=r.apply(obj,args)// 4.判断t的数据类型是一个函数或者是一个对象      const isTrue=t&&typeof t==='function'||typeof t==='object'// 5.返回创建的空对象return isTrue?t:obj}let a1 = _new (Person,'小明',20 )let a2 = _new (Person,'小蔡',25 )console.log(a1);console.log(a2);

1.首先创建一个空对对象

2.将原始函数的prototype指向新对象的__proto__属性

3.改变this的指向,将this指向新创建的对象,并传入this

4.判断返回值,如果是function或者object就返回

3.实例化对象的另一种写法

    class Person {constructor(name, age) {this.name = name;this.age = age;}eat() {console.log("吃苹果");}}let a1 = new Person("小明", 20);

实例化对象的__proto_能够访问构造函数的prototype,因此我们每次new一个新的对象出来,

都能访问到类上挂载的方法,下面我们来证明:

(1)例子1:不同两个实例化对象的__proto__是否相等

    let a1 = new Person("小明", 20);let a2 = new Person("小蔡", 25);console.log(a1.__proto__===a2.__proto__);   代码举例子1

打印的结果是true:很明显是一个相同的地址。

(2)例子2:实例化对象的__proto__指向构造函数的prototype

console.log(a1.__proto__===Person.prototype);

返回的结果也是true,通过这个例子就很好地解释了prototype的重要性,在prototype对象上放置

方法,没new出一个实例化对象,都使用的是同一快内存的空间,大大节省了内存。

(3)如果在类上加方法,直接将方法挂载到类的原型上

   console.log(Person.prototype);

constructor:指回这个类,也就是XXX.prototype  这个constructor指回来

(4)没有构造器的情况

 function Person(name, age) {this.name = name;this.age = age;}Person.prototype.eat=function(){console.log('吃苹果');}let a1=new Person('小明',20)console.log(Person.prototype);

这是没用构造器的写法。

4.有无构造器(constructor)的构造函数

(1)有的情况:

方法直接挂载到类的原型上。

(2)没有的情况

将方法挂载到函数的原型上也就是prototype。

5.constructor的用法

告诉我们是从那个类new出来的。

另外一种函数写法:

   function Person(name, age) {this.name = name;this.age = age;}Person.prototype.eat=function(){console.log('吃苹果');}// console.log( Person.prototype);let a1=new Person('小明',20)console.log(a1);

总而言之,constructor]是指回去,告诉你它是从哪里来的。

6.复习原型链

 

上图中想表达的是在object这个函数的prototype挂载了很多的方法,根据原型链的查找规则:

  1. 当访问一个实例对象的属性 (包括方法)时,首先查找这个实例对象自身有没有该属性;
  2. 如果没有就查找它的原型 (也就是__proto__指向的prototype原型对象)上是否有这个方法;
  3. 如果还没有就查找原型对象的原型 (Object的原型对象)上是否有这个方法;
  4. 依次类推一直找到null还没有,就说明没有这个属性或者方法。
  5. 如果每一步都能查找这个方法,那么 遵循就近原则 ,采用的是最近的那一步的属性或者方法。 比如实例对象自身有该属性,属性值为1,原型对象上也有该属性,属性值为2,最后这个属性值返回的是1。

任何一个对象都有__proto__,因此Object的原型对象是最后异步,如果找不到就说明没这个方法:

代码:

   let obj={}console.log(obj);

图示:

理解:

在object的原型上挂载了很多的属性方法,也就是最底层,任何一个对象都可以通过__proto__进行访问。

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

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

相关文章

[Linux] LVS负载均衡群集——DR模式

一、 DR模式的特点 直接路由: 在LVS_DR模式下,负载均衡器不修改数据包的IP地址,只修改目的MAC地址。这使得数据包可以直接路由到后端实际服务器上,而不需要返回到负载均衡器。 高性能: 由于数据包在传输过程中不需要回…

本地运行大语言模型并可视化(Ollama+big-AGI方案)

目前有两种方案支持本地部署,两种方案都是基于llamacpp。其中 Ollama 目前只支持 Mac,LM Studio目前支持 Mac 和 Windows。 LM Studio:https://lmstudio.ai/ Ollama:https://ollama.ai/download 本文以 Ollama 为例 step1 首先下…

唯一分解定理

唯一分解定理 1.内容 任何一个大于1的整数n都可以分解成若干个质数的连乘积,如果不计各个质数的顺序,那么这种分解是惟一的,即若n>1,则有 n ∏ p i j n\prod{p^j_i} n∏pij​这里的 p i p_i pi​是质数。 可以进行简单证明…

STM32_启动流程详解

目录标题 前言 启动流程概述复位中断函数详解SystemInit函数详解 __main函数详解 附录 stm32单片机的存储器映像中断向量表的映射 前言 最近在学习IAP远程OTA升级单片机固件程序,发现自己对单片机的启动流程还不是那么了解,就总结整理一下吧。 启动流程…

QT实现四则运算计算器

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);this->setMaximumSize(240,300);this->setMinimumSize(240,300);this->setWindowTitle("计算器&…

node.js mongoose简述

目录 官方文档 mongoose Schema Model Query document 关系 官方文档 Mongoose v8.0.3: Getting Started mongoose Mongoose 是一个 Node.js 环境下 MongoDB 的对象建模工具。它提供了一种在应用程序中与 MongoDB 数据库进行交互的方式,使得开发者能够使用…

NoSQL 数据库有哪些典型应用?

前面的内容介绍了数据库读写分离和分库分表相关知识,都是针对关系型数据库的,即通常说的 RDBMS。除了关系型数据库,NoSQL 在项目开发中也有着越来越重要的作用,与此同时,NoSQL 相关的内容也是面试的常客。今天我们一起…

计算机网络技术的应用探讨

一、计算机网络技术的概念与主要功能 计算机网络技术指的是将计算机与传输介质连接在 一起,并根据规定的网络协议进行数据通信,从而实现 数据资源共享的一种技术。计算机网络技术的主要功能 包括以下三点。第一,计算机网络技术具有通信功能&a…

如何进行软件测试和测试驱动开发(TDD)?

1. 软件测试概述 1.1 什么是软件测试? 软件测试是一种评估系统的过程,目的是发现潜在的错误或缺陷。通过对软件进行测试,开发者和测试人员可以确定软件是否符合预期的需求、功能是否正常运行,以及系统是否足够稳定和可靠。 1.2…

函数难题:排列

给定一个整数 n,将数字 1∼n 排成一排,将会有很多种排列方法。 现在,请你按照字典序将所有的排列方法输出。 输入格式 共一行,包含一个整数 n。 输出格式 按字典序输出所有排列方案,每个方案占一行。 数据范围 …

【Linux】驱动

驱动 驱动程序过程 系统调用 用户空间 内核空间 添加驱动和调用驱动 驱动程序是如何调用设备硬件 驱动 在计算机领域,驱动(Driver)是一种软件,它充当硬件设备与操作系统之间的桥梁,允许它们进行通信和协同工作。驱动程…

[已解决】uniapp内置插件,editor富文本报错(附quill.min.js、image-resize.min.js文件)

在使用uni-app运行内置插件editor时,无法输入内容,控制台报错 原因:查看官网得知,需动态引入quill.min.js、image-resize.min.js文件 解决方法: 1.下载quill.min.js、image-resize.min.js到项目static/eidtor文件中 链…

云原生之深入解析Kubernetes Operator的最佳实践和最常见的问题分析

一、Kubernetes Operator 简介 Kubernetes Operator 是通过连接主 API 并 watch 时间的一组进程,一般会 watch 有限的资源类型。当相关 watch 的 event 触发的时候,operator 做出响应并执行具体的动作。这可能仅限于与主 API 交互,但通常会涉…

从零开始搭建Go语言开发环境

https://www.liwenzhou.com/posts/Go/install_go_dev/ “go 命令现在默认在模块感知模式下构建包,即使没有 go.mod 存在也是如此。 “您可以将 GO111MODULE 设置为 auto,仅当当前目录或任何父目录中存在 go.mod 文件时,才能启用模块感知模式…

Linux下FFmepg使用

1.命令行录一段wav,PCM数据 ffmpeg -f alsa -i hw:0,0 xxx.wav//录制 ffplay out.wav//播放ffmpeg -f alsa -i hw:0,0 -ar 16000 -channels 1 -f s16le 1.pcm ffplay -ar 16000 -channels 1 -f s16le 1.pcm -ar freq 设置音频采样率 -ac channels 设置通道 缺省为1 2.将pcm…

uniapp组件map地图组件使用

在uniapp中&#xff0c;可以使用uni-app官方提供的map组件来实现地图功能。下面是一个简单的使用示例&#xff1a; 在页面中引入map组件&#xff0c;在template中添加以下代码&#xff1a; <template><view><!-- map组件 --><map :longitude"longi…

03 动态渲染数据

概述 One of the most used terms and reactive elements used when constructing Vue components is data properties. These manifest themselves within the data() function of a Vue instance: 数据属性是构建 Vue 组件时最常用的术语和反应式元素之一。这些属性体现在 …

Kubernetes实战(十四)-k8s高可用集群扩容master节点

1 单master集群和多master节点集群方案 1.1 单Master集群 k8s 集群是由一组运行 k8s 的节点组成的&#xff0c;节点可以是物理机、虚拟机或者云服务器。k8s 集群中的节点分为两种角色&#xff1a;master 和 node。 master 节点&#xff1a;master 节点负责控制和管理整个集群…

PyTorch官网demo解读——第一个神经网络(1)

神经网络如此神奇&#xff0c;feel the magic 今天分享一下学习PyTorch官网demo的心得&#xff0c;原来实现一个神经网络可以如此简单/简洁/高效&#xff0c;同时也感慨PyTorch如此强大。 这个demo的目的是训练一个识别手写数字的模型&#xff01; 先上源码&#xff1a; fr…

华为云CodeArts Pipeline常见问答汇总

1.【Pipeline】CodeArts Pipeline流水线如何传递参数至CodeArts Build编译构建任务 答参考文档 https://support.huaweicloud.com/pipeline_faq/pipeline_faq_0004.html https://support.huaweicloud.com/usermanual-pipeline/pipeline_10_0005.html https://support.hu…