JavaScript 原型与原型链

news2024/12/29 10:10:43

所有的 JavaScript 对象都会从一个 prototype(原型对象)中继承属性和方法:
Date 对象从 Date.prototype 继承。
Array 对象从 Array.prototype 继承。
所有 JavaScript 中的对象都是位于原型链顶端的 Object 的实例。
JavaScript 对象有一个指向一个原型对象的链。当试图访问一个对象的属性时,它不仅仅在该对象上搜寻,还会搜寻该对象的原型,以及该对象的原型的原型,依次层层向上搜索,直到找到一个名字匹配的属性或到达原型链的末尾。

每个构造函数都有prototype属性
每个实例函数都有__proto__属性
原型对象中都有一个constructor指向函数对象

函数拥有原型,以prototype指向原型,在定义是自动添加,且默认指向object
函数拥有实例,实例可以访问原型的属性和方法,实例对象拥有隐式原型,在创建对象时自动添加,以__proto__指向隐式原型,且为其构造函数的原型,且构造函数中的方法会在创建对象时添加到实例对象中(构造函数中没有该方法)
原型以constructor指向函数

Function是通过new自己产生的实例
Object是通过new Function产生的实例

原型链本质上是隐式原型链,作用是查找对象属性和方法

属性

属性在实例对象上,方法在原型上
已存在的构造函数不能通过 构造函数名.新属性名=新属性值 方式去添加属性
使用 prototype 属性就可以给对象的构造函数添加新的属性和方法:

Person.prototype.nationality = "English";

方法

Person.prototype.name = function() {
  return this.firstName + " " + this.lastName;
};

判断 instanceof

A instanceof B
如果B的显式原型在A的原型链上,返回true,否则返回false

获取构造函数 constructor

constructor 属性返回所有 JavaScript 变量的构造函数

"John".constructor                 // 返回函数 String()  { [native code] }
(3.14).constructor                 // 返回函数 Number()  { [native code] }
false.constructor                  // 返回函数 Boolean() { [native code] }
[1,2,3,4].constructor              // 返回函数 Array()   { [native code] }
{name:'John', age:34}.constructor  // 返回函数 Object()  { [native code] }
new Date().constructor             // 返回函数 Date()    { [native code] }
function () {}.constructor         // 返回函数 Function(){ [native code] }
function isArray(myArray) {
    return myArray.constructor.toString().indexOf("Array") > -1;
}
function isDate(myDate) {
    return myDate.constructor.toString().indexOf("Date") > -1;
}

即 constructor 返回 function isArray(myArray)
tostring 返回 function isArray(myArray)
indexOf 返回一个正整数 >-1 即为 constructor 里有indexof所包含的字符串,即为该对象

获取原型

使用 obj.proto 设置或读取原型被认为已经过时且不推荐使用(deprecated)了(已经被移至 JavaScript 规范的附录 B,意味着仅适用于浏览器)。
现代的获取/设置原型的方法有:

  • Object.getPrototypeOf(obj) —— 返回对象 obj 的 [[Prototype]]。
  • Object.setPrototypeOf(obj, proto) —— 将对象 obj 的 [[Prototype]] 设置为 proto。

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

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

相关文章

【C#】代码解析--打印数据集

系列文章 【C#】编号生成器(定义单号规则、固定字符、流水号、业务单号) 本文链接:https://blog.csdn.net/youcheng_ge/article/details/129129787 【C#】日期范围生成器(开始日期、结束日期) 本文链接:h…

LangChain:LLM应用程序开发(中)——文档问答、评估、Agents(代理)

文章目录 四、文档问答4.1 快速入门4.2 逐步实现4.3 其它方法 五、评估5.1 创建QA app5.2 生成测试数据点5.2.1 Hard-coded examples5.2.2 LLM-Generated examples 5.3 link chain debug手动评估5.4 LLM assisted evaluation5.5 LangChain Evaluation platform 六、Agents&…

704.二分查找

一、题目 二、代码 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int search(int* nums, int numsSize, int target) {int left 0;int right numsSize - 1;while (left < right) {int middle (left right) / 2;if (target > nums[middle]) {left m…

pip3 报错 distribution was not found and is required by the application

环境&#xff1a; centos 8 &#xff0c; pyhton3.6 背景&#xff1a; 升级python3.6 至 python3.10后&#xff0c; pip3安装包报错&#xff1a; pkg_resources.VersionConflict: (pip 21.2.4 (/usr/local/python3/lib/python3.10/site-packages), Requirement.parse(pip23.…

Linux:scp命令

1.介绍 scp命令是cp命令的升级版&#xff0c;即&#xff1a;ssh cp&#xff0c;通过SSH协议完成文件的复制。其主要的功能就是&#xff1a;在不同的Linux服务器之间&#xff0c;通过SSH协议互相传输文件。只要知晓服务器的账户和密码&#xff08;或密钥&#xff09;&#xff0c…

美光之后,韩国存储芯片也将成为输家,将损失千亿美元

美光很可能将完全丧失中国的企业市场&#xff0c;随着影响的扩大&#xff0c;韩国存储芯片或也将因美光的影响而蒙受巨大的损失&#xff0c;预计损失最高可能达到千亿美元&#xff0c;韩国存储芯片的老大地位也将因此动摇。 美光日前对媒体披露的数据指出因中国的安全审查&…

GitHub下的项目有pom.xml但右侧没有Maven问题

1.可以使用idea自带功能将pom.xml作为Maven导入 双击shift&#xff0c;输入Maven点击Add Maven Projects注意&#xff1a;在settings中将Maven先配置好&#xff0c;我使用的是自己设置的Maven仓库而不是idea自动部署在C盘的仓库

SQL Server数据库 -- 表的创建与管理

文章目录 一、数据表的组成二、创建数据表 表的创建表的查看表的增加表的修改表的删除、三、表的架构操作四、总结 前言 上次博客写到了数据库的创建与管理&#xff0c;但是创建的库里面什么东西都没有&#xff0c;现在我们需要在库里面添加数据表内容 一、数据表的组成 在创…

美好未来“一束光”儿童安全教育项目在四川泸定正式启动

6月26日&#xff0c;由中华少年儿童慈善救助基金会和北京臻爱公益基金会共同发起的美好未来计划“一束光”儿童安全教育公益项目启动仪式&#xff0c;在四川省甘孜藏族自治州泸定县贡嘎山片区寄宿制学校举行。 出席本次启动仪式活动的嘉宾有&#xff1a;中华少年儿童慈善救助基…

基于“SRP模型+”多技术融合在生态环境脆弱性评价模型构建、时空格局演变分析与RSEI指数的生态质量评价及拓展应用

目录 ​第一章 生态环境脆弱性评价内涵及基于文献可视化方法研究热点分析 第二章 数据来源及预处理 第三章 生态环境脆弱性评价模型构建 第四章 生态环境脆弱性时空格局演变分析 第五章 生态环境脆弱性时空格局演变驱动机制分析 第六章 基于 RSEI 指数的生态质量评价 第…

js输入一个字符串,打印出该字符串中,所有字符的排列组合(超清晰)

一、题目 输入一个字符串&#xff0c;打印出该字符串中&#xff0c;所有字符的排列组合。 输入&#xff1a;abc 输出&#xff1a;[abc, acb, bca, bac, cab, cba] 二、思路 回溯算法。其核心思想是通过递归的方式进行深度优先搜索&#xff0c;当发现当前的选择不符合要求时…

机器学习技术:如何使用交叉验证和ROC曲线提高疾病预测的准确性和效率?

一、引言 随着机器学习的普及&#xff0c;评估模型的性能越来越重要。交叉验证和ROC曲线是两种常见的评估模型性能的方法。本文将介绍这两种方法的基本原理和应用场景&#xff0c;并结合实际案例和技术实践&#xff0c;讲解如何使用交叉验证和ROC曲线来提高机器学习模型的性能…

mongodb原理

一&#xff1a;MongoDB的优点和缺点 优点 面向文档存储(类JSON数据模式简单而强大)动态查询全索引支持,扩展到内部对象和内嵌数组查询记录分析快速,就地更新高效存储二进制大对象 (比如照片和视频)复制和故障切换支持Auto- Sharding自动分片支持云级扩展性MapReduce 支持复杂…

chatgpt赋能python:Python选择对话框:简化用户操作的实用工具

Python选择对话框&#xff1a;简化用户操作的实用工具 在Python编程领域中&#xff0c;常常需要与用户进行交互&#xff0c;以便更好地控制程序运行结果。而选择对话框则是一种简化用户操作的实用工具&#xff0c;可避免用户输入错误或步骤繁琐的问题。在本篇文章中&#xff0…

【UE】一个需求案例掌握Timeline和插值Lerp

文章目录 问题背景结论先行timeline和lerp原理使用timelinelerp实现相机平滑跟随BUG猜想验证和解决 问题背景 今天用timelinelerp插值做了一个相机平滑跟随的需求 如果只是要求跟随&#xff0c;直接在tick中把相机位置设置成角色位置就可以 但希望有一个相机滞后角色一点点的…

如何避免ChatGPT,ChatGLM这类大语言模型胡说八道

“ ChatGPT&#xff0c;ChatGLM这类大语言模型一本正经的胡说八道&#xff0c;可能也是它创造性回答的部分。那么谁来判断它在编造无中生有的内容&#xff1f;恐怕只有人才能判断。模型怎么会产生幻觉&#xff0c;我们又怎么避免它产生幻觉&#xff1f;” 01 — 昨天体验了国产…

快上车,搭乘HUAWEI HiCar驶向未来

HUAWEI HiCar&#xff08;以下简称HiCar&#xff09;是华为提供的人-车-家全场景智慧互联解决方案&#xff0c;连接手机与车辆&#xff0c;充分发挥各自的优势属性&#xff0c;将手机的应用/服务生态延伸进车辆&#xff0c;实现以手机为核心的全场景体验。消费者通过HiCar可以感…

HTML 超链接标签、图片标签

超链接标签 超链接描述 HTML使用标签<a>来设置超文本链接 超链接可以是一个字&#xff0c;一个词&#xff0c;或者一组词&#xff0c;也可以是一幅图像&#xff0c;您可以点击这些内容来跳转到新的文档或者当前文档中的某个部分。 <a href"url">链接文…

【运维】Linux升级Python2

【运维】Linux升级Python2 操作系统&#xff1a;centos7python版本&#xff1a;升级前版本2.7.5&#xff0c;升级后2.7.18python3版本&#xff1a;升级前3.6.8&#xff0c;升级后版本3.8.8 1、查看当前python版本 [root1 ~]# python -V Python 2.7.5 2、yum安装python [roots14…

Apikit 自学日记:发起文档测试-Websocket

Websocket 进入某个WS协议的API文档详情页&#xff0c;点击文档上方 测试 标签&#xff0c;即可进入 API 测试页&#xff0c;系统会根据API文档的定义的求头部、Query参数、请求体自动生成测试界面并且填充测试数据。 填写/修改请求参数 1.1设置请求头部&#xff08;Header&…