深入解析 JavaScript 中的 F.prototype

news2024/11/20 8:28:10

🧑‍🎓 个人主页:《爱蹦跶的大A阿》

🔥当前正在更新专栏:《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》

​ 

✨ 前言

        JavaScript作为一门原型继承语言,函数的prototype属性在其中发挥着重要作用。prototype并不难以理解,但许多刚接触JS的开发者仍会对其存在一定困惑。本文将详细剖析prototype的指向、作用及运用,帮助大家深入理解这个核心概念。

✨ 正文

        在 JavaScript 中,每定义一个函数 F,解释器都会为其添加一个 prototype 属性,这个属性指向函数的原型对象。理解 prototype 在 JavaScript 中的作用很重要。

  1. prototype是函数独有的属性,普通对象没有这个属性。
  2. 每个函数都包含一个 prototype 属性,这个属性指向一个对象就是这个函数的原型对象。
  3. 当一个函数被定义后,JS解释器会为这个函数添加 prototype 属性,这个属性指向函数的原型对象。
  4. 原型对象中包含了可以由该函数创建的对象共享的属性和方法。
  5. 通过给函数的 prototype 对象添加属性和方法,我们可以实现对象间的信息共享。

例如:

function Person() {

}

Person.prototype.name = 'John';

let p1 = new Person();
p1.name; // 'John'

        这里为 Person.prototype 添加了一个 name 属性,然后 p1 对象可以访问到这个属性。

        原型对象的作用就是定义所有实例对象共享的属性和方法。正确使用原型对象可以节省内存,实现信息共享。

        综上所述,JavaScript 中函数的 prototype 属性指向一个原型对象,这个原型对象包含了可以由该函数创建的对象共享的属性和方法。理解原型对象的作用很重要,可以实现 JS 对象间的信息共享,是一个核心概念。

针对JavaScript中的prototype和原型链的每一点结合代码示例进行更详细的讲解:

  • prototype对象

每个函数都有一个prototype属性指向原型对象:

function Person() {} 

console.log(Person.prototype) // 指向Person的原型对象

 原型对象中包含该函数创建的实例对象共享的属性和方法:

Person.prototype.name = 'John';

let p1 = new Person();
p1.name // 'John'
  • __proto__属性

实例对象都有__proto__属性指向构造函数的原型对象:

let p1 = new Person();
console.log(p1.__proto__ === Person.prototype); // true
  • 原型链

通过__proto__链条可以实现对原型属性的访问:

// p1没有name属性 
// 通过__proto__查找Person.prototype中name属性
p1.name // 'John'
  • constructor属性

原型对象中都有constructor属性指向关联的构造函数:

console.log(Person.prototype.constructor === Person) // true
  • 原型继承

子类原型重写实现继承:

function Student() {}

Student.prototype.__proto__ = Person.prototype; 

Student.prototype.sayHi = function() {
  console.log('Hi');
}

Student继承了Person的原型中的属性和sayHi方法。 

✨ 结语

         通过本文的介绍,我们可以看到函数的prototype属性直接指向了一个原型对象,这个原型对象中包含了该函数所创建的实例对象共享的属性和方法。

        正确运用原型对象,可以实现JS对象之间的信息共享,优化内存占用。同时还需要注意,原型链过长可能会影响查找效率。

        综上所述,prototype是JS中非常重要的一个概念。充分理解prototype的作用,掌握何时如何使用原型对象,可以帮助我们写出内存优化的代码,提高程序的性能。

      

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

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

相关文章

基于CanvasLabel的Leaflet矢量数据免切片属性标注实践

目录 前言 一、Leaflet.CanvasLabel 1、开源地址 2、设置参数说明 二、组件集成 1、新建html文件 2、声明样式 3、定义矢量文本渲染器 4、定义地图 5、添加矢量数据 6、最终效果 总结 前言 在一般的业务场景中,针对小量的矢量数据,比如POI兴…

快速统计文件和文件夹大小

windows上没有方便统计各个层级文件夹文件大小的工具,于是自己做了一个 源码 https://gitee.com/chen227/calc-tree-space

imgaug库图像增强指南(32):塑造【雪景】效果的视觉魔法

引言 在深度学习和计算机视觉的世界里,数据是模型训练的基石,其质量与数量直接影响着模型的性能。然而,获取大量高质量的标注数据往往需要耗费大量的时间和资源。正因如此,数据增强技术应运而生,成为了解决这一问题的…

【项目日记(三)】内存池的整体框架设计

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:项目日记-高并发内存池⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你做项目   🔝🔝 开发环境: Visual Studio 2022 项目日…

python-分享篇-一箭穿心

一箭穿心💘 代码 from turtle import * color(black,red) pensize(5) begin_fill() penup() goto(50,50) pendown() right(45) goto(100,0) left(90) fd(120) circle(50,225) penup() goto(0,0) pendown() left(135) fd(120) circle(50,225) seth(90) circle(50,2…

unity 单例模式(实例详解)

文章目录 在Unity中,单例模式是一种常用的编程设计模式,用于确保在整个应用程序生命周期中,只有一个类的实例存在。这样可以保证数据的全局唯一性和共享性,例如游戏场景中的资源管理器、游戏控制器、事件管理器等。 以下是一个简单…

WorkPlus Meet私有化视频会议软件-构建安全高效的内网会议体验

在企业内部,高效的会议协作是推动团队协同和工作效率的关键。而内网会议系统成为了构建安全高效的内部会议体验的必要工具。作为一家领先的内网会议系统,WorkPlus Meet以其卓越的性能和智能化的功能,助力企业实现高效安全的内部会议体验。 为…

python实现图片式PDF转可搜索word文档[OCR](已打包exe文件)

目录 1、介绍 1.1、痛点 1.2、程序介绍 2、安装方式 2.1、🔺必要环节 2.2、脚本安装 2.2.1、不太推荐的方式 2.2.2、节约内存的方式 2.3、⭐完整版安装 3、使用 3.1、最终文件目录 3.2、主程序 3.2.1、绝对路径 3.2.2、是否为书籍 3.2.3、⭐截取区域 …

Threejs实现立体3D园区解决方案及代码

一、实现方案 单独贴代码可能容易混乱,所以这里只讲实现思路,代码放在最后汇总了下。 想要实现一个简单的工业园区、主要包含的内容是一个大楼、左右两片停车位、四条道路以及多个可在道路上随机移动的车辆、遇到停车位时随机选择是否要停车&#xff0…

内存地址解码3至8 线解码器(74LS138)

3 至 8 线解码器 (74LS138)1 内存地址解码 处理器通常可以寻址比单个内存芯片覆盖的内存空间大得多 的内存空间。 为了将存储设备拼接到处理器的地址空间中,解码是必要的。 例如,8088 发出 20 位 地址,总共有 1MB 的…

stable diffuison的安装和使用

stable diffuison的安装和使用 简单介绍 Stable Diffusion是一个深度学习文本到图像的生成模型,它可以根据文本描述生成详细的图像。这个模型主要应用于文本生成图像的场景中,通过给定的文本提示词,模型会输出一张与提示词相匹配的图片。 S…

【spring】代码生成器

📝个人主页:五敷有你 🔥系列专栏:spring ⛺️稳中求进,晒太阳 代码生成器(本质IO流) 在mybatis的逆向工程生成model和mapper接口和xml文件后,还需要反复的写Service的接口和…

(2)(2.1) Andruav Android Cellular(二)

文章目录 前言 5 Andruav Web Client 6 Andruav Telemetry 7 Andruav高级功能 8 将Andruav与SITL配合使用 9 FAQ 10 术语表 前言 Andruav 是一个基于安卓的互联系统,它将安卓手机作为公司计算机,为你的无人机和遥控车增添先进功能。 5 Andruav W…

提升网站关键词排名的工具

随着互联网的蓬勃发展,网站的关键词排名成为衡量网站流量和曝光度的重要指标。在这个竞争激烈的数字时代,站在搜索引擎结果的前列变得至关重要。为了实现这一目标,合理利用关键词排名优化工具是必不可少的。本文将重点介绍147SEO软件&#xf…

RT Thread Stdio生成STM32L431RCT6无法启动问题

一、问题现象 使用RT thread Stdio生成STM32L431RCT6工程后,编译下载完成后系统无法启动,无法仿真debug; 二、问题原因 如果当前使用的芯片支持包版本为0.2.3,可能是这个版本问题,目前测试0.2.3存在问题&#xff0c…

ESP32 MicroPython 小车红外自动寻迹与避障⑭

ESP32 MicroPython 小车红外自动寻迹与避障⑭ 1、小车超声波避障2、 小车红外自动寻迹3、 小车摄像头自动寻迹 1、小车超声波避障 实验目的 使用舵机水平扫描和超声波测距功能,实现小车自动避障行走 实验内容 小车控制舵机转动到中间位置,读取前方距离。…

26、江科大stm32视频学习笔记——W25Q64简介

一、电路图 1、软件模拟的SPI:线可以任意接 2、硬件模拟的SPI:要按以下方式连接 3、本次软件模拟和硬件模拟使用同一个电路图,方便切换 CS(片选):PA4 DO(从…

适合初学者的 机器学习 资料合集(可快速下载)

AI时代已经来临,机器学习成为了当今的热潮。但是,很多人在面对机器学习时却不知道如何开始学习。 今天,我为大家推荐几个适合初学者的机器学习开源项目,帮助大家更好地了解和掌握机器学习的知识。这些项目都是开源的,…

分享flask_socketio配置时遇到的一些问题

flask_socketio 1.前言 flask_socketio应用启动后,在控制台中,存在着flask_socketio这些烦人的log 一堆的get和post几秒一个让我什么都看不清,因此想要关掉log 结果没想到,找了很多办法半天去不掉flask_socketio的log 试过了…

Docker(十一)Swarm mode

作者主页: 正函数的个人主页 文章收录专栏: Docker 欢迎大家点赞 👍 收藏 ⭐ 加关注哦! Swarm mode Docker 1.12 Swarm mode 已经内嵌入 Docker 引擎,成为了 docker 子命令 docker swarm。请注意与旧的 Docker Swarm …