JavaScript进阶:js的一些学习笔记-原型

文章目录

        • js面向对象
          • 1. 原型
          • 2. constructor属性
          • 3. 对象原型
          • 4. 原型继承
          • 5. 原型链

js面向对象

构造函数 属性和方法

function Person(name,age){this.name = name;this.age = age;this.play = ()=>{console.log('玩!');}
}
const a = new Person('1',12),b = new Person('2',13);
console.log(a.play == b.play);
// flase
1. 原型

作用在构造函数的属性

  • 构造函数通过原型分配的函数是所有对象所共享的
  • js规定,每一个构造函数都有一个prototype属性,指向另一个对象,称为原型对象
  • 这个对象可以挂载函数,对象实例化不会多次创建原型上的函数,节约内存
  • 把那些不变的方法,直接定义在prototype对象上,这样所有对象的实例就可以共享这些方法
  • 构造函数和原型对象中的this都指向实例化对象
function Person(name,age){this.name = name;this.age = age;
}
Person.prototype.play = ()=>{console.log('玩');
}
const a = new Person('1',12),b = new Person('2',13);
console.log(a.play == b.play);
// true

在Array上定义方法max用于求数组中的最大值

Array.prototype.max = function(){let arr = this;let res = arr[0];for(let e of arr){if(e > res)res = e;}return res;
}const arr1 = [1,2,3];
console.log(arr1.max());
// 3
2. constructor属性

每个原型对象里面都有constructor属性,该属性执行该原型对象的构造函数

使用场景:如果有多个对象的方法,我们给原型对象采取对象形式赋值,但是这样就会覆盖构造原型对象原来的内容,这样修改后的原型对象constructor就不再指向当前构造函数了,此时,我们可以在修改后的原型对象中,添加一个constructor指向原来的构造函数

function Person(){}
/*Person.prototype = {// constructor:Person,play:function(){console.log('玩!');}
}
console.log(Person.prototype);
// {play: ƒ}
*/
Person.prototype = {constructor:Person,play:function(){console.log('玩!');}
}console.log(Person.prototype);
// {constructor: ƒ, play: ƒ}
3. 对象原型

对象都会有一个属性**_proto_指向构造函数的prototype原型对象,之所以对象可以使用构造函数prototype原型对象的属性和方法,就是因为对象有_proto_**原型的存在。

function Person(){}
const a = new Person();
console.log(a.__proto__ == Person.prototype);
// true
function Person(){}
const a = new Person();
a.__proto__.play = function(){console.log('哈哈');
}
const b = new Person();
b.play();
// 哈哈
4. 原型继承
function Person(){this.eyes = 2this.head = 1
}function Woman(){}
function Man(){}
Woman.prototype = new Person()
Woman.prototype.constructor = Woman;
Woman.prototype.play = function(){console.log('玩!');
}
Man.prototype = new Person();
Man.prototype.constructor = Man;const a = new Woman(),b = new Man();
console.log(a,b);

运行结果:

在这里插入图片描述

5. 原型链
function Person(){}
console.log(Person.prototype.__proto__ == Object.prototype)
// trueconsole.log(Object.prototype.__proto__);
// nullconst a = new Person();
console.log(a.__proto__.__proto__ == Object.prototype)
// true
  • 当访问一个对象的属性(或方法)时,首先查找这个对象自身有没有该属性
  • 如果没有就查找它的原型(也就是**_proto_**指向的prototype原型对象)
  • 如果还没有就查找原型对象的原型(Object的原型对象)
  • 依次类推一直找到Object为止(null)
  • **_proto_**对象原型的意义就在于为对象成员查找机制提供一个方向,或者说一条路线
  • 可以使用 instanceof运算符用于检测构造函数的prototype属性是否出现在某个实例对象的原型链上

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

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

相关文章

同态滤波算法详解

同态滤波是一种用于增强图像的方法,特别适用于去除图像中的照明不均和阴影。该算法基于照射反射模型,将图像分解为两个分量:照射分量(illumination component)和反射分量(reflection component)…

使用Julia语言和R语言实现K-均值

K-均值算法基础 K-均值聚类算法属于一种无监督学习的方法,通过迭代的方式将数据划分为K个不重叠的子集(簇),每个子集由其内部数据点的平均值来表示。计算方法大体如下: 1.初始化簇中心 选择K个数据点作为初始的簇中心…

分布式系统互斥性与幂等性问题的分析解决

前言 随着互联网信息技术的飞速发展,数据量不断增大,业务逻辑也日趋复杂,对系统的高并发访问、海量数据处理的场景也越来越多。 如何用较低成本实现系统的高可用、易伸缩、可扩展等目标就显得越发重要。为了解决这一系列问题,系…

2024年最新指南:如何订阅Midjourney(详尽步骤解析)

前言: Midjourney是一个基于人工智能的图像生成工具,它使用高级算法来创建独特和复杂的图像。这个工具能够根据用户输入的文字描述生成对应的图片。Midjourney的特点在于它能够处理非常抽象或者具体的描述,生成高质量、富有创意的视觉内容。M…

高频:spring知识

1、bean的生命周期? 主要阶段 初始化 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh 信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext67424e82: startup date []; root of context hi…

宝妈在家带孩子还是出去工作?足不出户,两者如何兼顾?

我是电商珠珠 很多女性生完孩子之后,就在家当家庭主妇带孩子。部分人舍不得吃穿,把从老公那里要来的钱都给孩子买了东西。自己也想过要出去工作,但是空窗期太久,觉得自己什么都不会,没有企业会要。 前段时间有一个硕…

采购代购系统独立站,接口采集商品上货

采购代购系统独立站的建设与商品上货接口的采集是一个综合性的项目,涉及前端开发、后端开发、数据库设计以及API接口的对接等多个环节。以下是一个大致的步骤和考虑因素: 一、系统规划与需求分析 明确业务需求:确定代购系统的核心功能&…

爬虫与DataFrame对象小小结合

import pandas as pd import requests from lxml import etree #数据请求 url"https://www.maigoo.com/brand/list_1715.html" headers{User-Agent:} #数据响应 resrequests.get(url,headersheaders) tree etree.HTML(res.text) #数据解析 titletree.xpath(.//div[c…

金现代产品方案部部长王宁,将出席“ISIG-低代码/零代码技术与应用发展峰会”

3月16日,第四届「ISIG中国产业智能大会」将在上海中庚聚龙酒店拉开序幕。本届大会由苏州市金融科技协会指导,企智未来科技(LowCode低码时代、RPA中国、AIGC开放社区)主办。大会旨在聚合每一位产业成员的力量,深入探索低…

冥想与AI:打造定制的放松体验

如今,在浏览网页或社交网络时,您似乎很难对一条条心理健康信息无动于衷。遇到这种情况的可不只是您。当今不断变化的时代给人们平添压力,企业纷纷利用智能技术满足人们的减压需求,让人们的生活多一些平和从容。 冥想就是一种练习呼…

计算机缺失vcruntime140_1.dll文件如何修复?解析5种修复方法

​其实大部分人在使用计算机的过程中,我们常常遇到各种问题,比如程序无法执行、文件无法打开等等。其中,找不到vcruntime140_1.dll无法执行这个问题是比较常见的。那么,我们该如何解决这个问题呢?本文将详细介绍几种简…

day3 菜品

文章目录 公众字段填充1. 自定义注解标识需要用的方法定义注解定义枚举 2. 自定义类拦截用了上面注释的方法3. 在方法上使用注解 获取yml自定义数据生成 UUID.randomUUID().toString()文件上传到本地七牛云 oss https://developer.qiniu.com/kodo/1239/java#server-upload本地文…

excel批量数据导入时用poi将数据转化成指定实体工具类

1.实现目标 excel进行批量数据导入时,将批量数据转化成指定的实体集合用于数据操作,实现思路:使用注解将属性与表格中的标题进行同名绑定来赋值。 2.代码实现 2.1 目录截图如下 2.2 代码实现 package poi.constants;/*** description: 用…

SEO优化的特点及其重要性(提升网站排名和流量)

随着互联网的发展,网站竞争日益激烈,如何让自己的网站在众多同类网站中脱颖而出?SEO优化成为了现代网站经营不可或缺的一部分。本文将为您介绍SEO优化的特点和重要性,以及如何利用SEO技巧提升网站的排名和流量。 一:S…

3d场景重建图像渲染 | 神经辐射场NeRF(Neural Radiance Fields)

神经辐射场NeRF(Neural Radiance Fields) 概念 NeRF(Neural Radiance Fields,神经辐射场)是一种用于3D场景重建和图像渲染的深度学习方法。它由Ben Mildenhall等人在2020年的论文《NeRF: Representing Scenes as Neur…

matplotlib-柱状图

日期:2024.03.14 内容:将matplotlib的常用方法做一个记录,方便后续查找。 # from matplotlib import pyplot as plt# 设置画布大小 plt.figure(figsize(20,8),dpi 300)# 全局设置中文字体 plt.rcParams[font.sans-serif] [Simhei]# 绘制三…

【深度学习实践】HaGRID,YOLOv5,手势识别项目,目标检测实践项目

文章目录 数据集介绍下载数据集将数据集转换为yolo绘制几张图片看看数据样子思考类别是否转换下载yolov5修改数据集样式以符合yolov5创建 dataset.yaml训练参数开始训练训练分析推理模型转换onnx重训一个yolov5s后记 数据集介绍 https://github.com/hukenovs/hagrid HaGRID&a…

可视化Relay IR

目标 为Relay IR生成图片形式的计算图。 实现方式 使用RelayVisualizer可视化Relay,RelayVisualizer定义了一组接口(包括渲染器、解析器)将IRModule可视化为节点和边,并且提供了默认解析器和渲染器。 首先需要安装依赖&#x…

可视化表单流程编辑器为啥好用?

想要提升办公率、提高数据资源的利用率,可以采用可视化表单流程编辑器的优势特点,实现心中愿望。伴随着社会的进步和发展,提质增效的办公效果一直都是很多职场办公团队的发展需求,作为低代码技术平台服务商,流辰信息团…

(黑马出品_05)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

(黑马出品_05)SpringCloudRabbitMQDockerRedis搜索分布式 微服务技术分布式搜索 今日目标1.初识elasticsearch1.1.了解ES1.1.1.elasticsearch的作用1.1.2.ELK技术栈1.1.3.elasticsearch和lucene1.1.4.为什么不是其他搜索技…