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.mzph.cn/news/744548.shtml

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

相关文章

redis中的zset的原理

一、zset有序集合的原理 如果有序集合元素个数少于128个且元素值小于64字节,使用压缩列表(新版本已经废弃压缩列表改用listpack数据结构了) 如果不满足上述条件,采用跳表作为redis的底层数据结构 二、压缩列表 1.由连续内存块组…

漏洞复现-金和OA系列

漏洞复现-金和OA系列 🗡金和OA jc6 RCE金和OA GetTreeDate.aspx SQL注入【新】金和OA RssModulesHttp.aspx接口SQL注入漏洞复现C6-GetSgIData.aspx SQL注入金和OA C6 GetTreeDate.aspx SQL注入金和OA C6 GetTreeDate.aspx未授权金和OA JC6 OfficeServer 任意文件上传漏洞金和…

全栈之路-新坑就绪-星野空间

感觉自己的技术栈一直没有形成一个很好的闭环 开新坑,准备把自己的技术栈链路打通, Don‘t think too much, just act![得意]

QT中connect()的参数5:Qt::DirectConnection、Qt::QueuedConnection区别

原文链接:https://blog.csdn.net/Dasis/article/details/120916993 connect用于连接QT的信号和槽,在qt编程过程中不可或缺。它其实有第5个参数,只是一般使用默认值,在满足某些特殊需求的时候可能需要手动设置。 Qt::AutoConnect…

C++ 网络编程学习五

C网络编程学习五 网络结构的更新单例模式懒汉单例模式饿汉单例模式懒汉式指针智能指针设计单例类 服务器优雅退出asio的多线程模型IOServiceasio多线程IOThreadPoolepoll 和 iocp的一些知识点 网络结构的更新 asio网络层,会使用io_context进行数据封装,…

Git的基础使用

几条铁令!!!!! 切换分支前先提交本地的修改代码及时提交,提交过就不会丢遇到任何问题都不要删除文件目录,第一时间找人请教push前和merge前一定要pull保证代码为最新的,pull的时候一…

针对《Linux系统CUDA环境配置》一文的补充与学习记录

一、针对《Linux(Ubuntu)下适配Open3D_ML库的CUDA环境配置》一文的补充说明 ***1 Linux(Ubuntu)下适配Open3D_ML库的CUDA环境配置-CSDN博客一文虽然完成了Linux内核-NVIDIA显卡驱动-CUDA-cudnn的版本匹配并成功运行,但…

1.下载安装ESP32开发环境ESP-IDE

ESP32简介 ESP32介绍 说到ESP32,首先ESP32不是一个芯片,ESP32是一个系列芯片, 是乐鑫自主研发的一系列芯片微控制器。它主要的功能就是支持WiFi和蓝牙, ESP32指的是ESP32裸芯片。但是,“ESP32”一词通常指ESP32系列芯…

Python保留格式复制多个Excel工作表到汇总表并生成目录(附源码下载)

要实现这个功能,你可以使用openpyxl库来操作Excel文件。以下是一个简单的示例: 1. 首先,安装openpyxl库,如果你还没有安装的话。在命令行中输入以下命令进行安装: bash pip install openpyxl2. 然后,使用…

Unity之PUN实现多人联机射击游戏的优化

目录 🎮一、 跳跃,加速跑 🎮二、玩家自定义输入昵称 🍅2.1 给昵称赋值 🍅2.2 实现 🎮三、玩家昵称同步到房间列表 🍅3.1 获取全部玩家 🍅3.2 自定义Player中的字段 &#…

Altair® RapidMiner®数据分析与人工智能平台

无论您的组织处于数据旅程的哪个阶段,Altair RapidMiner 都能帮助您克服前进道路上的挑战性障碍。我们为成熟的数据分析团队提供现代化之路,也为刚刚起步的团队提供自动化之路。我们不需要您的组织从根本上改变人员、流程、计算环境或现有数据状况&#…

圈内大佬呕心之作,一年后斩获腾讯T3,这份Java学习笔记有多厉害

说这句话的人其实有一些误解,误解就在于,安逸的生活并不等于不需要奋斗,这要看你的家底。 某聪如果说要选择安逸的生活,他可以很安逸,因为他有了安逸的资本,而大部分的你,并没有这个资本&#…

SQL中的distinct的使用方法

1. distinct含义与使用方法 distinct用来查询不重复记录的条数,即用distinct来返回不重复字段的条数(count(distinct id)),其原因是distinct只能返回他的目标字段,而无法返回其他字段。 注意事项 distinct 【查询字段】,必须放…

压缩json字符串

GZIPOutputStream 需要关闭,而 ByteArrayOutputStream 不需要关闭。具体原因如下: GZIPOutputStream:GZIPOutputStream是一种过滤流,它提供了将数据压缩为GZIP格式的功能。当使用此类的实例写入数据时,它会对数据进行压…

L1-039 古风排版(C++)

中国的古人写文字&#xff0c;是从右向左竖向排版的。本题就请你编写程序&#xff0c;把一段文字按古风排版。 输入格式&#xff1a; 输入在第一行给出一个正整数N&#xff08;<100&#xff09;&#xff0c;是每一列的字符数。第二行给出一个长度不超过1000的非空字符串&a…

阿里云数据湖存储加速套件JindoData

计算存储分离已经成为云计算的一种发展趋势。在计算存储分离之前&#xff0c;普遍采用的是传统的计算存储相互融合的架构&#xff0c;但是这种架构存在一定的问题&#xff0c;比如在集群扩容的时候会面临计算能力和存储能力相互不匹配的问题。用户在某些情况下只需要扩容计算能…

[MYSQL数据库]- 索引

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、认识索…

opencalib的标定代码学习

一、源码 opencailb的源代码 代码地址:https://github.com/PJLab-ADG/SensorsCalibration/blob/master/README.md /** Copyright (C) 2021 by Autonomous Driving Group, Shanghai AI Laboratory* Limited. All rights reserved.* Yan Guohang <yanguohang@pjlab.org.cn…

力扣--课程表--bfs+dfs

整体思路&#xff1a; 这是一道拓扑序列的题目&#xff0c;我们将边的方向定义成从先修课指向后修课的方向&#xff0c;借一下官方的题解图片&#xff0c;我们需要判断的是形成的这个图结构是否存在环&#xff0c;如果存在环&#xff0c;那么代表不能完成所有课程的学习。 bfs思…

强推游戏爱好者!雾锁王国联机服务器部署教程

继《幻兽帕鲁》游戏爆火之后&#xff0c;与它同类型的《雾锁王国》也是强力刷屏&#xff0c;不分伯仲&#xff0c;在 Steam 上的评分一直稳定在“特别好评”&#xff0c;让小伙伴们很“上头”。就在两者游戏玩家反响爆火的同时&#xff0c;官方服务器人数爆满&#xff0c;卡顿频…