prototype 和 __proto__的区别

prototype__proto__ 在 JavaScript 中都与对象的原型链有关,但它们各自有不同的用途和含义。

prototype

  • prototype 是函数对象的一个属性,它指向一个对象,这个对象包含了可以由特定类型的所有实例共享的属性和方法。
  • 当我们创建一个新的对象实例时,这个实例会继承其构造函数的 prototype 对象上的属性和方法。
  • 我们可以使用 Constructor.prototype.methodName = function() { ... } 的方式来给构造函数的所有实例添加新的方法或属性。

proto

  • __proto__ 是一个非标准的属性,但在大多数现代浏览器中都可用,它指向对象的原型对象。
  • 当你访问一个对象的属性时,如果该对象自身没有这个属性,JavaScript 就会在该对象的原型链上查找这个属性。
  • 需要注意的是,由于 __proto__ 是非标准的,因此在生产环境中应避免使用它,而是使用 Object.getPrototypeOf()Object.setPrototypeOf() 这样的标准方法来访问和修改对象的原型。

区别

  • prototype 是函数对象的一个属性,而 __proto__ 是对象的一个属性(尽管是非标准的)。
  • prototype 用于定义构造函数的所有实例可以共享的属性和方法,而 __proto__ 用于在运行时访问或修改对象的原型。
  • 当你使用 new 关键字创建一个新的对象实例时,这个实例的 __proto__ 会被设置为构造函数的 prototype

示例

function Person() {}
// 通过 prototype 添加方法
Person.prototype.sayHello = function() {console.log("Hello, I am a person!");
};
var person1 = new Person();
// 访问 sayHello 方法,它存在于 person1 的原型链上
person1.sayHello(); // 输出 "Hello, I am a person!";
// 访问 __proto__ 来查看 person1 的原型对象
console.log(person1.__proto__ === Person.prototype); // 输出 true
// 注意:不推荐在生产环境中使用 __proto__
var a = {}, b = Object.prototype;
console.log(a.prototype === b, Object.getPrototypeOf(a)===b);// false, true
// 1、只有函数对象才有prototype,a是普通对象,没有prototype,所以a.prototype是undefined
// 2、当使用字面量 `{}` 或 `new Object()` 来创建一个对象时,这个对象会继承自`Object.prototype`。
// 3、`Object.getPrototypeOf(a)` 是一个方法,它返回指定对象的原型。对于普通对象(如通过 `{}` 或 `new Object()` 创建的对象),这个方法会返回 `Object.prototype`。

总结

prototype__proto__ 都是 JavaScript 原型链机制的一部分,但它们的用途和用法是不同的。在编写健壮和可维护的代码时,应优先使用标准方法(如 Object.getPrototypeOf()Object.setPrototypeOf())来操作对象的原型。

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

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

相关文章

【力扣】数组中的第K个最大元素

一、题目描述 给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1: 输入: [3,2,1,5,…

C++(第五天----多继承、虚继承、虚函数、虚表)

一、继承对象的内存空间 构造函数调用顺序&#xff0c;先调用父类&#xff0c;再调用子类 #include<iostream>using namespace std;//基类 父类 class Base{ public: //公有权限 类的外部 类的内部 Base(){cout<<"Base()"<<endl;}Base(int …

ANN文献综述

人工神经网络文献综述 摘要 人工神经网络&#xff08;Artificial Neural Networks, ANNs&#xff09;是由多个简单的、相互连接的处理单元组成的自适应系统&#xff0c;通过调整这些单元之间的连接强度&#xff0c;ANNs能够实现对复杂数据的建模和预测。本文综述了ANNs的基本…

el-input-number 点击加减只能加一次

el-input-number 点击加减只能加一次 <el-input-number v-model"editForm.quantity" placeholder"请输入下单数量(店均)" change"quantityChangeFn"></el-input-number>需要在方法里面加 this.$forceUpdate() quantityChangeFn(val…

oracle用户过期/设置无限期用户/ORA-28001:the password has expired

oracle默认情况下&#xff0c;新建的账户只有180天的有效期&#xff0c;在有效期到期前一周就会报警。而一旦过了有效期&#xff0c;账户就会被锁定无法登录。所以为了方便起见&#xff0c;要修改oracle用户的有效期为无限。 1.查看用户密码的有效期设置&#xff0c;一般默认的…

【ABB】控制器语言切换

【ABB】控制器语言切换 操作流程演示 操作流程 点击【菜单】点击【Control Panel】点击【Language】点击【Chinese】点击【OK】此时会弹出弹窗&#xff0c;点击【YES】此时控制器会重启&#xff0c;重启完成就是中文了 演示 点击【菜单】 点击【Control Panel】 点击【Langua…

【hive】数据采样

参考https://hadoopsters.com/how-random-sampling-in-hive-works-and-how-to-use-it-7cdb975aa8e2&#xff0c;可以直接查看原文&#xff0c;下面只是对原文进行概括和实际性能测试。 1.distribute by sort by2.测试3.map端数据过滤优化采样 在说数据采样之前&#xff0c;需要…

贪吃蛇——C语言(VS2022含源代码,及源代码zip文件)

一.游戏背景 贪吃蛇是一款在世界上盛名已久的小游戏&#xff0c;贪食蛇游戏操作简单&#xff0c;可玩性比较高。这个游戏难度最大的不是蛇长得很长的时候&#xff0c;而是开始。那个时候蛇身很短&#xff0c;看上去难度不大&#xff0c;却最容易死掉&#xff0c;因为把玩一条小…

Streaming local LLM with FastAPI, Llama.cpp and Langchain

题意&#xff1a; 使用FastAPI、Llama.cpp和Langchain流式传输本地大型语言模型 问题背景&#xff1a; I have setup FastAPI with Llama.cpp and Langchain. Now I want to enable streaming in the FastAPI responses. Streaming works with Llama.cpp in my terminal, but…

首个“可控”人物视频生成大模型--商汤Vimi:一张照片生成一分钟视频

商汤科技又整大活了&#xff0c;只需一张照片就能生成一分钟视频&#xff01; 7月4日&#xff0c;商汤发布了业内首个面向C端用户的、“可控”人物视频生成大模型产品Vimi&#xff0c;毫不夸张的说&#xff0c;视频制作者的福音来了&#xff01; Vimi有什么特别之处&#xff1…

在postman中调试supabase的API接口

文章目录 在supabase中获取API地址和key知道它的restfull风格在postman中进行的设置1、get请求调试2、post新增用户调试3、使用patch更新数据&#xff0c;不用put&#xff01;4、delete删除数据 总结 在supabase中获取API地址和key 首先登录dashboard后台&#xff0c;首页- 右…

特征缩放介绍

目录 一、引入特征缩放&#xff1a;二、特征缩放介绍&#xff1a;三、如何实现特征缩放&#xff1a;1.分别除特征中最大值缩放到0—1&#xff1a;2.均值归一化缩放到-1—1&#xff1a;3.Z-Score归一化&#xff1a; 四、特征缩放合理范围&#xff1a; 一、引入特征缩放&#xff…

Zabbix 配置 VMware 监控

Zabbix监控VMware 官方文档&#xff1a;https://www.zabbix.com/documentation/current/en/manual/vm_monitoring Zabbix 可以使用低级发现规则自动发现 VMware 虚拟机管理程序和虚拟机&#xff0c;并根据预定义的主机原型创建主机来监控它们。Zabbix 还包括用于监控 VMware …

精准调整:数控切割机导轨的水平与垂直度校准!

滚柱导轨因其具有高承载、高精度、高稳定性和长寿命等特点&#xff0c;被广泛应用在重型设备、精密设备、自动化生产线、航空航天和半导体设备等领域。尤其是在数控切割机中的应用&#xff0c;最为广泛。 对于数控切割机来说&#xff0c;滚柱导轨的调整非常重要&#xff0c;是数…

文本编辑新境界!轻松一键,从表格中提取特定列并保存为TXT文本

在数字化办公的时代&#xff0c;表格数据的处理是每位职场人士必须面对的任务。然而&#xff0c;面对繁杂的表格数据和海量的信息&#xff0c;如何快速准确地提取我们所需的特定列内容&#xff0c;成为了许多人头疼的问题。今天&#xff0c;就让我来为大家分享一个高效编辑的新…

一对一服务,定制化小程序:NetFarmer助力企业精准触达用户

在当今这个日新月异的数字化时代&#xff0c;小程序以其独特的魅力和广泛的应用场景&#xff0c;正逐步成为企业出海战略中的璀璨明星。NetFarmer&#xff0c;作为业界领先的数字化出海服务商&#xff0c;不仅深谙HubSpot营销自动化的精髓&#xff0c;更在小程序领域展现了卓越…

mysql 字符集(character set)和排序规则(collation)

文章目录 概念1、字符集1.1、举例1.2、常见字符集 utf8 和 utf8mb4 区别1.3、字符集 使用 2、排序规则2.1、举例2.2、常见的排序规则 utf8mb4_bin 、utf8mb4_general_ci、utf8mb4_unicode_ci2.3、使用 概念 在 MySQL 中&#xff0c;字符集&#xff08;character set&#xff0…

JAVA 对象存储OSS工具类(腾讯云)

对象存储OSS工具类 import com.qcloud.cos.COSClient; import com.qcloud.cos.ClientConfig; import com.qcloud.cos.auth.BasicCOSCredentials; import com.qcloud.cos.auth.COSCredentials; import com.qcloud.cos.model.ObjectMetadata; import com.qcloud.cos.model.PutObj…

SpringBoot的在线教育平台-计算机毕业设计源码68562

摘要 在数字化时代&#xff0c;随着信息技术的飞速发展&#xff0c;在线教育已成为教育领域的重要趋势。为了满足广大学习者对于灵活、高效学习方式的需求&#xff0c;基于Spring Boot的在线教育平台应运而生。Spring Boot以其快速开发、简便部署以及良好的可扩展性&#xff0c…

LeetCode 算法:二叉树的最近公共祖先 III c++

原题链接&#x1f517;&#xff1a;二叉树的最近公共祖先 难度&#xff1a;中等⭐️⭐️ 题目 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点…