JS中__proto__与prototype的区别

js中__proto__与prototype的区别

JS中__proto__和prototype是两个与原型相关的属性,它们在功能上稍有不同。本文将具体介绍并比较这两者的区别,并提供相应的代码示例。

首先,我们先来了解一下它们的含义和用途。

proto

__proto__是对象的一个内置属性,它用于指向该对象的原型。每个对象都有一个__proto__属性,包括自定义对象、内置对象和函数对象。通过__proto__属性,我们可以访问和操作对象的原型链。

让我们来看一个例子:

let obj = {};console.log(obj.__proto__); // 输出:Object {}let arr = [];console.log(arr.__proto__); // 输出:Array []function func() {}console.log(func.__proto__); // 输出:[Function]

上面的代码中,我们创建了一个空对象obj,并访问了它的__proto__属性。可以看到,obj.__proto__指向了一个Object{}对象。同样,我们还创建了一个空数组arr,并访问了它的__proto__属性,结果是arr.__proto__指向了一个Array []对象。而对于函数对象func来说,它的__proto__指向的是一个[Function]对象。

总结起来,__proto__属性用于指向对象的原型,我们可以通过它来访问和操作原型链。

prototype

prototype是函数对象独有的属性,它指向了一个原型对象。每个函数对象都有一个prototype属性,但它只有在这个函数作为构造函数使用时才有意义。

我们来看一个示例:

稿定AI社区 稿定AI社区

在线AI创意灵感社区

稿定AI社区 60 查看详情 稿定AI社区

function Person() {}console.log(Person.prototype); // 输出:Person {}

上面的代码中,我们定义了一个Person函数对象,并访问了它的prototype属性。可以看到,Person.prototype指向了一个Person{}对象。

prototype属性的主要作用是在构造函数模式下,用于构建实例对象的原型链。当我们使用构造函数来创建一个对象时,它的__proto__属性会指向构造函数的prototype属性。

let person = new Person();console.log(person.__proto__ === Person.prototype); // 输出:true

上面的代码中,我们使用了Person构造函数来创建了一个对象person。结果表明,person.__proto__指向了Person.prototype。

区别和联系

__proto__和prototype都与对象的原型相关,它们之间的联系和区别如下:

__proto__是实例对象的属性,用于指向该对象的原型;而prototype是构造函数的属性,用于指向构造函数的原型对象。__proto__是读取并访问对象的原型链的属性,可以在实例对象上直接访问;而prototype是构造函数的属性,只能在构造函数内部访问。__proto__可以通过Object.setPrototypeOf()或直接赋值的方式来修改;而prototype只能在构造函数内部通过函数名.prototype来修改。__proto__是非标准的属性,只有部分浏览器支持;而prototype是标准属性,所有的对象和函数都有。

下面的代码示例用于进一步说明这两者的区别与联系:

function Animal() {}Animal.prototype.eat = function() {  console.log("Animal is eating");};function Dog() {}Dog.prototype = Object.create(Animal.prototype);Dog.prototype.bark = function() {  console.log("Dog is barking");};const dog1 = new Dog();dog1.eat(); // 输出:Animal is eatingdog1.bark(); // 输出:Dog is barkingconsole.log(dog1.__proto__ === Dog.prototype); // 输出:trueconsole.log(Dog.prototype.__proto__ === Animal.prototype); // 输出:true

上面的代码中,我们通过定义Animal构造函数和Dog构造函数,创建了一个继承关系。通过__proto__和prototype属性,我们可以访问到对象的原型链,并且证明了它们之间的联系。

综上所述,__proto__和prototype在JS中都与原型相关,但在功能和使用方式上有所不同。了解它们的区别可以帮助我们更好地理解JS中的原型机制,并在编写代码时更灵活地利用它们。

以上就是JS中__proto__与prototype的区别的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/500385.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
java框架如何优化函数式编程性能?
上一篇 2025年11月8日 20:05:25
php项目都有哪些目录
下一篇 2025年11月8日 20:05:30

相关推荐

  • 如何找到并安装适合你编程语言的扩展?

    首先确认编程语言及项目需求,再根据编辑器选择合适扩展。以VS Code为例,通过扩展面板搜索语言名称,优先选择官方推荐、高下载量和评分的扩展,如Microsoft提供的Python扩展。安装后检查语法高亮与智能提示,并在设置中配置解释器路径、格式化工具等选项。若使用框架或特定运行时,可额外安装对应增…

    2026年9月12日
    200
  • VSCode有哪些必装的JavaScript扩展?

    ESLint 检查代码问题并自动修复,Prettier 格式化代码保持统一,JavaScript 代码片段提升编写效率,Path Intellisense 补全文件路径,Auto Rename Tag 同步标签重命名,五者协同提升 JS 开发体验。 VSCode 上开发 JavaScript 项目,…

    2026年9月12日
    000
  • 如何在mysql中优化JOIN多表查询性能

    优化MySQL JOIN查询需先建立关联字段索引,减少全表扫描;通过WHERE提前过滤数据,避免SELECT *以降低开销;遵循小表驱动大表原则,合理控制JOIN数量;利用覆盖索引避免回表;结合EXPLAIN分析执行计划,关注type和Extra字段,持续调优慢查询。 在MySQL中优化JOIN多表…

    2026年9月12日
    500
  • DeepSeek如何集成到IDE_DeepSeek集成到IDE方法

    可通过插件、LSP、REST API或Web嵌入方式将DeepSeek集成到IDE中,提升编码效率。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 如果您希望在开发过程中利用DeepSeek的代码理解与生成能力,可以通过将其集成到集成开发环…

    2026年9月12日
    100
  • Jedis客户端JSON数据类型处理:从Double到Byte的转换技巧

    在使用Jedis客户端的UnifiedJedis.jsonGet方法获取JSON数据时,开发者可能会遇到数值类型(尤其是字节数组)被意外转换为double类型的问题。本文深入分析了这一现象的根源,并提供了三种有效的解决方案 以上就是Jedis客户端JSON数据类型处理:从Double到Byte的转换…

    2026年9月12日
    100
  • VSCode的全局搜索有哪些过滤技巧?

    通过配置search.exclude和使用搜索面板的包含/排除功能,可高效过滤VSCode全局搜索结果。首先在settings.json中设置search.exclude,如”/node_modules/”: true排除所有node_modules目录,”/.l…

    2026年9月12日
    200
  • 如何通过扩展让VSCode支持一门新的编程语言?

    要让VSCode支持新编程语言需通过扩展实现。1. 使用yo code生成扩展模板,包含package.json、语法高亮和语言配置文件。2. 在.tmLanguage.json中用正则定义语法高亮规则,注册到package.json。3. 通过language-configuration.json…

    2026年9月12日
    100
  • 怎样使用VSCode的REST Client扩展测试API?

    使用 VSCode 的 REST Client 扩展可直接在编辑器中测试 API。安装由 Huachao Mao 开发的 REST Client 扩展后,创建以 .http 或 .rest 为后缀的文件,按规范编写请求,如 GET 或 POST 方法、URL、请求头及请求体。在请求下方点击 Send…

    2026年9月12日
    100
  • Laravel 8 API 多用户表认证实现指南

    在 Laravel 8 API 中,实现多用户表认证(如同时认证用户、学生和教师)是常见需求。本文将详细介绍如何利用 Laravel 的认证系统,结合 Sanctum 提供的 API 令牌认证能力,通过配置自定义认证守卫(Guards)和提供者(Providers),为不同用户群体构建独立且安全的认…

    2026年9月12日
    100
  • 怎样在VSCode中管理多个工作区?

    利用VSCode多根工作区功能可统一管理多个项目。通过“文件 > 添加文件夹到工作区”将项目加入,再“将工作区另存为”生成.code-workspace文件,实现一键恢复布局。可在.vscode/settings.json中配置工作区专属设置,如缩进大小、Python解释器路径等,并通过.ex…

    2026年9月12日
    100
  • 除了内置的终端,VSCode有哪些插件能极大提升命令行的工作效率?

    Code Runner可一键运行多语言代码并显示结果,适合快速测试;2. Terminal Tabs通过标签页管理多个终端会话,支持重命名和快捷切换;3. Shell Command允许对文件或选中文本执行自定义shell命令,提升重复操作效率;4. Task Explorer可视化运行项目脚本,自…

    2026年9月12日
    100
  • 如何使用mysql设计订单支付系统

    答案:设计可靠订单支付系统需合理设计order_info和payment_log表结构,使用DECIMAL存储金额,通过事务保证ACID,结合状态机控制订单状态转换,利用唯一索引防重复,加锁与WHERE条件校验防止并发问题,记录支付日志并定期对账,确保数据一致性与系统可扩展性。 设计一个可靠的订单支…

    2026年9月12日
    000
  • VSCode的代码格式化可以针对语言设置吗?

    VSCode支持按语言单独设置格式化规则,通过settings.json为不同语言配置缩进、格式化工具等。例如JavaScript使用Prettier,Python设4空格缩进,HTML保存时自动格式化;需安装对应插件并正确关联文件类型,确保语言模式识别准确,从而实现多语言项目风格统一。 可以,VS…

    2026年9月12日
    100
  • 全栈应用中X-Frame-Options防护策略的正确实施

    本教程探讨了在全栈应用中配置`x-frame-options` http响应头以防止点击劫持(clickjacking)的常见误区。我们发现,在spring security等后端框架中配置此头部仅对后端api端点有效,而前端应用(如由nginx、tomcat等服务器托管的单页应用)仍可能面临风险。…

    2026年9月12日
    000
  • 如何用VSCode管理多个Git仓库?

    使用工作区集中管理多个Git仓库是VSCode高效开发的关键。通过“文件→将文件夹添加到工作区”整合项目,保存为.code-workspace文件以便下次直接打开。资源管理器左侧显示多个根文件夹,每个对应一个独立Git仓库。源代码管理面板自动识别各仓库状态,顶部下拉框切换当前操作仓库,确保提交、拉取…

    2026年9月12日
    200
  • edge浏览器如何检查扩展程序是否安全_edge浏览器插件安全性验证与风险识别方法

    首先确认扩展来源是否可信,检查发布者信息及“来自Microsoft Edge加载项”标识;其次审查权限请求合理性,避免过度索取权限的插件;接着查看用户评价与更新频率,避开差评多或长期未更新的扩展;确保Microsoft Defender SmartScreen功能开启以拦截恶意行为;最后可通过开发者…

    2026年9月12日
    100
  • VSCode的括号匹配高亮如何自定义?

    通过修改 workbench.colorCustomizations 可自定义 VSCode 括号高亮颜色,需在 settings.json 中设置 foreground1、foreground2、foreground3 和 unexpectedBracket.foreground 对应的值,并确保…

    2026年9月12日
    100
  • 如何导出和导入VSCode的完整配置?

    备份VSCode配置需复制用户目录下的settings.json、keybindings.json、snippets文件夹,并导出扩展列表;2. 推荐使用内置Settings Sync功能,通过GitHub账号同步设置、扩展等;3. 注意检查路径依赖和敏感信息,确保迁移后扩展正常工作。 导出和导入V…

    2026年9月12日
    100
  • 打开DeepSeek官网 deepseek在线版立即使用

    DeepSeek官网在线版可通过https://www.deepseek.com访问,用户点击“开始对话”即可使用智能对话、代码生成、长文本处理等功能,开发者还可申请API密钥集成至自有系统,支持多语言调用与安全配置。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepS…

    2026年9月12日
    100
  • 为什么VSCode是开发者的首选编辑器?

    VSCode成为开发者首选因其轻量高效、启动快、资源占用低,基于Electron构建却优化出色,支持快速搜索、符号跳转、多光标编辑,原生集成Git,拥有海量扩展生态,覆盖主流语言与开发工具,通过Language Server Protocol实现智能补全与调试,配置灵活,跨平台开源免费,微软持续维护…

    2026年9月12日
    200

发表回复

登录后才能评论
关注微信