首页 > 其他分享 >请说下你对__proto__和prototype的理解

请说下你对__proto__和prototype的理解

时间:2025-01-14 09:45:21浏览次数:1  
标签:__ 属性 proto 对象 prototype 构造函数

在JavaScript中,__proto__prototype 是两个与原型链和继承紧密相关的属性。它们各自有不同的用途和行为,但经常一起被讨论,因为它们共同构成了JavaScript中对象继承的基础。

1. __proto__

  • __proto__ 是一个对象内部的链接,指向它的原型(即它的构造函数的 prototype 属性所指向的对象)。
  • 通过这个链接,对象可以访问在原型上定义的属性和方法。这是JavaScript实现基于原型的继承的一种方式。
  • 需要注意的是,__proto__ 是一个非标准属性,虽然在大多数现代浏览器中都可以使用,但在一些旧的JavaScript环境中可能不可用。因此,在生产代码中直接使用 __proto__ 通常是不推荐的。
  • 使用 Object.getPrototypeOf(obj) 是获取对象原型的一种更标准、更可靠的方式。

2. prototype

  • prototype 是函数对象的一个属性,是一个指向原型对象的指针。
  • 当一个函数被用作构造函数来创建新对象时,新对象的 __proto__ 属性会指向构造函数的 prototype 属性所指向的对象。这样,新创建的对象就可以访问在构造函数的原型上定义的属性和方法。
  • 通过修改构造函数的 prototype 属性,我们可以向所有由该构造函数创建的对象添加新的属性和方法。这是JavaScript中实现基于原型的继承和扩展的一种常见方式。
  • prototype 属性在函数定义时自动创建,并默认包含一个名为 constructor 的属性,该属性指向函数本身。

总结

  • __proto__prototype 是JavaScript中实现基于原型的继承和扩展的关键部分。
  • __proto__ 是对象内部的链接,指向它的原型;而 prototype 是函数对象的属性,指向由该函数作为构造函数创建的对象的原型。
  • 通过修改构造函数的 prototype 属性,我们可以影响所有由该构造函数创建的对象的行为。
  • 在实际开发中,我们通常会通过操作 prototype 来实现继承和方法共享,而避免直接使用 __proto__

标签:__,属性,proto,对象,prototype,构造函数
From: https://www.cnblogs.com/ai888/p/18670089

相关文章

  • 设备组删除设备
    设备组删除设备调试工具接口应在服务器端调用,详细说明参见服务端API。接口说明接口英文名removeIotGroupDevice功能描述本接口为设备组删除已添加的设备。调用方式HTTPS调用POSThttps://api.weixin.qq.com/wxa/business/group/removedevice?access_token=ACCESS_TO......
  • 对于5G的到来,你是怎么看的?说说你的想法
    5G的到来无疑为前端开发带来了前所未有的机遇与挑战。以下是我从前端开发角度对5G到来的一些看法:1.更快的数据传输速度5G技术显著提高了数据传输速度,这对于前端开发来说意味着可以更快速地加载和处理数据。这将大大提升用户体验,尤其是对于那些需要处理大量数据或实时数据的Web......
  • box-sizing常用的属性有哪些?分别有什么作用?
    在前端开发中,box-sizing属性是一个用于定义元素盒模型计算方式的重要CSS属性。它主要决定了元素的宽度和高度如何计算,特别是与内边距(padding)和边框(border)的关系。box-sizing常用的属性有两个:content-box和border-box。content-box:这是box-sizing的默认值。在这种模式下,元素......
  • HTML5相对于HTML4有哪些优势?
    HTML5相对于HTML4在前端开发领域具有显著的优势。以下是对这些优势的详细分析和归纳:语义化标签:HTML5引入了一系列新的语义化标签,如<article>、<aside>、<nav>、<header>、<footer>等。这些标签不仅使网页结构更加清晰,还有利于搜索引擎优化(SEO)和提高网站的可访问性。相比之下,HTM......
  • 对于让你接手一个你觉得很烂的老项目,你该怎么办?
    接手一个感觉很烂的老项目确实是一个挑战,但也是一个提升自己解决问题能力的机会。以下是一些建议,帮助你应对这种情况:了解项目:仔细阅读项目的文档,包括需求文档、设计文档、技术选型文档等。与前任开发者或项目相关人员进行沟通,了解项目的历史背景、存在的问题以及他们为什么......
  • cx6 issue
    issue:gpu025MissingregistrersBAR,abortingfirmwareversion:28.39.2048right:gpu026是broadcom网卡root@gpu026:~#ipashowdevenp83s0f0np07:enp83s0f0np0:<BROADCAST,MULTICAST,UP,LOWER_UP>mtu1500qdiscmqstateUPgroupdefaultqlen1000......
  • 写一个格式化金额的方法
    在前端开发中,格式化金额通常意味着将数字金额转换为易于阅读的字符串形式,例如添加千位分隔符、保留特定数量的小数位等。以下是一个使用JavaScript编写的简单方法,用于格式化金额:functionformatMoney(amount,decimalPlaces=2,decimalSeparator='.',thousandSeparator=',......
  • vue项目利用vite打包发版,前端页面自动提示用户刷新页面
    概要        我们做一个纯前端自动提示用户刷新页面的功能,这个功能主要是防止用户的js代码还是旧版的导致某些功能没能及时更新。整体架构流程1、我们先在public/version.json创建这个json文件,用来存储版本号{"version":"1.0"}2、我们可以在vite.config.j......
  • 写一个函数找出给定数组中的最大差值
    在前端开发中,JavaScript是一种常用的编程语言,因此我将使用JavaScript来写一个函数,该函数可以找出给定数组中的最大差值。这里我们假设“最大差值”是指数组中最大值与最小值之间的差。functionfindMaxDifference(arr){//检查数组是否为空if(arr.length===0){......
  • 获取用户访问小程序数据周趋势
    获取用户访问小程序数据周趋势调试工具接口应在服务器端调用,详细说明参见服务端API。本接口支持云调用。需开发者工具版本>=1.02.1904090(最新稳定版下载),wx-server-sdk>=0.4.0接口说明接口英文名getWeeklyVisitTrend功能描述该接口用于获取用户访问小程序数据周趋......