面试题之---解释一下原型和原型链
-
实例化对象
- 和普调函数一样,只不过调用的时候要和new连用(实例化),不然就是一个普通函数调用
-
function Person () {} const o1 = new Person() //能得到一个空对象 const o2 = Person() //什么也得不到,这就是普通的函数调用
-
原型
-
函数原型--prototype
每一个函数天生自带一个成员,叫做prototype,是一个对象空间。
在函数的prototype里面存储的内容,不是给函数使用的,是给函数的每一个实例化对象使用的。
-
对象原型__proto__
每一个对象天生自带一个成员,叫做__proto__,是一个对象空间。
这个__proto__对象空间是给每一个对象使用的。
function Person () {}
const o1 = new Person()
console.log(o1.__proto__ === Person.prototype) //true
实例化对象的__proto__和所属的构造函数的prototype是一个对象空间
function Person(name) { this.name = name;
} Person.prototype.sayHello = function() { console.log(`Hello, my name is ${this.name}`);
}; const person1 = new Person('Alice');
person1.sayHello(); // Output: Hello, my name is Alice
在这个例子中,person1 对象通过 __proto__ 属性访问 Person.prototype,从而可以调用 sayHello 方法。
-
constructor
实例化对象的__proto__里面也有一个成员叫做constructor。
这个属性就是指向当前这个对象所属的构造函数。
function Person () {}
const o1 = new Person()
console.log(o1.constructor === Person) //true
-
原型链
- 对象之间的继承关系通过构造函数的prototype指向父类对象,直到指向Object对象为止形成的指向链条。
- 通俗讲: 原型链是原型对象创建过程的历史记录。
- 注:在javascript中,所有的对象都拥有一个__proto__属性指向该对象的原型(prototype) 。
- 当一个对象我们不知道准确的是谁构造的时候,我们就把它看成object的实例化对象
-
也就是说,我们的构造函数的prototype的__proto__指向的是object.prototype
-
那么object.prototype也是一个对象,我们有一句话叫万物皆对象,所以object.prototype就到顶了,object.prototype的__proto__就是null
-
查找顺序:当你访问某个属性时,JavaScript 采用以下顺序查找:
- 看对象本身是否有这个属性。
- 如果没有,查看该对象的
__proto__是否有这个属性。 - 如果还没有,继续查找
__proto__.__proto__,依此类推,直到查到Object.prototype。如果在整个原型链中都未找到,返回undefined。
-
原型关系图

相关文章:
面试题之---解释一下原型和原型链
实例化对象 和普调函数一样,只不过调用的时候要和new连用(实例化),不然就是一个普通函数调用 function Person () {} const o1 new Person() //能得到一个空对象 const o2 Person() //什么也得不到,这就是普通的…...
【Leecode】Leecode刷题之路第46天之全排列
题目出处 46-全排列-题目出处 题目描述 个人解法 思路: todo代码示例:(Java) todo复杂度分析 todo官方解法 46-全排列-官方解法 预备知识 回溯法:一种通过探索所有可能的候选解来找出所有的解的算法。如果候选解…...
自动驾驶革命:从特斯拉到百度,谁将主宰未来交通?
内容概要 自动驾驶技术正在经历一个前所未有的革命性变化,各大企业纷纷抢占这一充满潜力的新市场。以特斯拉和百度为代表的行业巨头,正利用各自的优势在这一技术的赛道上展开激烈竞争。特斯拉凭借其在电动汽车和自动驾驶领域的前瞻性设计与不断革新的技…...
Python __str__()方法
在Python中,str() 方法是一个特殊的方法(也称为魔术方法或双下方法),它定义了当对象需要被转换为字符串表示时应该如何做。 当你尝试打印对象(使用 print() 函数)或将对象插入到需要字符串表示的上下文中&…...
虚拟机的安装
添加映像文件 自动或者手动分配磁盘 添加密码 创建用户 创建快照...
HCIP快速生成树 RSTP
STP(Spanning Tree Protocol,生成树协议)和RSTP(Rapid Spanning Tree Protocol,快速生成树协议)都是用于在局域网中消除环路的网络协议。 STP(生成树协议) 基本概念: ST…...
Python基础学习-05元组 tuple
目录 1、元组的定义 2、元组的切片和索引 3、元组的函数 4、二维元组 5、本节总结 1、元组的定义 • 基本上可以理解为一个不可改变的列表 • 元组没有列表那么常用,但是它的关键是不可改变性 • 使用() 定义一个元组 1) T (1, 2, 3, 4, …...
vue3 基于element-plus进行的一个可拖动改变导航与内容区域大小的简单方法
1、先上个截图: 说明:拖动上面的分隔栏就可以实现,改变左右区域的大小。 2、上面的例子来自官网的: Container 布局容器 | Element Plus 3、拖动的效果来自: https://juejin.cn/post/7029640316999172104#heading-1…...
c++基础28函数的类型
函数的类型 基本用法例子usingfucntion 基本用法 在C中,函数类型是指函数的签名,包括返回类型、参数类型以及参数的数量。函数类型可以用来声明函数指针、函数引用或者作为模板参数。 函数也可当成一种数据类型 函数指针: 函数指针可以指向…...
Elasticsearch(四):query_string查询介绍
query_string查询介绍 1 概述2 基本概念3 数据准备4 query_string查询示例4.1 基本查询4.2 复杂查询解析4.3 高级过滤解析4.4 模糊查询解析4.5 高亮查询解析4.6 分页查询解析 5 总结 大家好,我是欧阳方超,可以我的公众号“欧阳方超”,后续内容…...
超好用shell脚本NuShell mac安装
利用管道控制任意系统 Nu 可以在 Linux、macOS 和 Windows 上运行。一次学习,处处可用。 一切皆数据 Nu 管道使用结构化数据,你可以用同样的方式安全地选择,过滤和排序。停止解析字符串,开始解决问题。 强大的插件系统 具备强…...
Vue禁止打开控制台/前端禁止打开控制台方法/禁用F12/禁用右键
代码片段展示了如何在前端页面中禁用右键菜单、禁止文本选择、阻止特定键盘操作(如F12键打开开发者工具),以及通过检测窗口尺寸变化来尝试阻止用户调试页面。 // 鼠标禁止右键禁止打开控制台及键盘禁用forbidden(){// 1.禁用右键菜单document…...
volatile关键字
1. 可见性 当一个变量被声明为 volatile 时,任何线程对该变量的写入操作都会立即对其他线程可见。这意味着: 当一个线程修改了 volatile 变量的值,其他线程在读取这个变量时会看到最新的值,而不是可能被缓存的旧值。 这解决了多线…...
[Linux] 共享内存
在Linux中,共享内存是一种允许不同进程之间直接交换数据的高效机制。它是IPC(Inter-Process Communication,进程间通信)的一种方式,允许多个进程通过映射同一块物理内存区域来实现数据共享,而无需使用内核来…...
网络的基础
学习地点(泷羽sec的个人空间-泷羽sec个人主页-哔哩哔哩视频 (bilibili.com)) HTTP协议介绍 HTTP,全称为超文本传输协议(HyperText Transfer Protocol),是用于万维网服务器向本地浏览器传输超文本ÿ…...
金融学期末速成笔记
【拯救者】金融学速成(基础习题) 重点: 市场经济是发达的商品经济。在市场经济条件下,市场机制作为资源配置方式,发挥基础性作用。 除具有商品经济的一般特征外,与商品经济相比,市场经济还具有一些新的特征…...
【Elasticsearch入门到落地】1、初识Elasticsearch
一、什么是Elasticsearch Elasticsearch(简称ES)是一款非常强大的开源搜索引擎,可以帮助我们从海量数据中快速找到需要的内容。它使用Java编写,基于Apache Lucene来构建索引和提供搜索功能,是一个分布式、可扩展、近实…...
电子版产品册代替纸质版产品册,开源节流!
在当今数字化时代,企业纷纷寻求创新手段以降低成本、提高效率。纸质版产品册作为传统宣传手段,虽然具有一定的宣传效果,但成本高昂、更新不便、环保压力等问题日益凸显。本文将为您详细解析如何通过采用电子版产品册替代纸质版产品册&#…...
npm i忽略依赖冲突
在使用npm安装依赖时,如果遇到依赖冲突,通常npm会提示错误并阻止安装。但是,如果你想要忽略这些依赖冲突,可以使用以下几种方法: 1.使用--force或-f参数:这个参数会强制npm忽略某些错误,包括依…...
商品,订单业务流程梳理一
业务架构梳理 业务系统介绍 业务商品流程 业务订单流程 业务售后流程 系统架构 技术栈...
Windows升级Node版本指南
在 Windows 上升级 Node.js,主要有四种方法,各有侧重。对于大多数开发者,使用版本管理工具 nvm-windows 是最灵活高效的选择。 Windows安装Node.js: 步骤1:访问 Node.js 官方网站 官方网站,下载适用于 Wind…...
保姆级教程:用Forge 1.16.3给你的Minecraft服务器装Mod,从下载到联机全流程
保姆级教程:用Forge 1.16.3给你的Minecraft服务器装Mod,从下载到联机全流程 和朋友一起玩Minecraft原版生存久了,难免会想尝试更多新玩法。Mod能为游戏带来全新生物、装备、魔法系统甚至维度冒险,但很多玩家在搭建Mod服务器时会被…...
STM32CubeMX实战:用高级定时器TIM1实现带刹车功能的互补PWM输出(F4系列)
STM32CubeMX实战:用高级定时器TIM1实现带刹车功能的互补PWM输出(F4系列) 在电机控制、电源管理等工业应用中,硬件级的保护机制往往比软件响应更加可靠。STM32F4系列的高级定时器TIM1提供的互补PWM输出与刹车功能,正是为…...
5分钟掌握TrafficMonitor插件系统:从零开始构建你的桌面监控中心
5分钟掌握TrafficMonitor插件系统:从零开始构建你的桌面监控中心 【免费下载链接】TrafficMonitorPlugins 用于TrafficMonitor的插件 项目地址: https://gitcode.com/gh_mirrors/tr/TrafficMonitorPlugins 还在为Windows桌面上单调的系统监控而烦恼吗&#x…...
QProcess::FailedToStart “No program defined“。qtcreator用的好好的,然后就不能调试了
点击 项目-》运行-》执行档根本原因:执行档:路径为空 解决办法:添加这样执行档 就有路径了。就可以用了...
IP集成时代CDC验证新思路:用户灰盒方法解析与实践
1. 项目概述与核心问题在FPGA和ASIC设计领域,时钟域交叉(CDC)问题就像一颗深埋的“定时炸弹”。随着设计复杂度的飙升,尤其是IP(知识产权核)复用成为主流,这颗炸弹的引线变得越来越隐蔽…...
CANopen协议核心机制与工业自动化应用实践
1. CANopen协议的核心机制解析 CANopen协议作为工业自动化领域的通信标准,其核心在于三个关键机制:对象字典、网络管理(NMT)以及过程数据对象(PDO)/服务数据对象(SDO)。理解这些机制…...
别再只写客户端了!用C语言搞定聊天室全栈开发:客户端+服务端联调避坑指南
别再只写客户端了!用C语言搞定聊天室全栈开发:客户端服务端联调避坑指南 在C语言全栈开发中,客户端和服务端的联调往往是开发者最容易踩坑的环节。很多初学者能够独立完成客户端或服务端的代码编写,但当两者需要协同工作时&#x…...
Pega Helm Charts:Kubernetes上企业级低代码BPM平台部署指南
1. 项目概述:Pega Helm Charts 是什么,以及为什么你需要它如果你正在或计划在 Kubernetes 上部署 Pega Platform,那么pegasystems/pega-helm-charts这个项目就是你绕不开的“官方说明书”和“自动化部署工具箱”。简单来说,这是一…...
基于FastAPI与Flutter的LLM全栈聊天应用:私有化部署与架构解析
1. 项目概述与核心价值最近在折腾一个全栈的AI聊天应用,把后端、前端、数据库和缓存都整合到了一起。这个项目叫LLMChat,它不是一个简单的API包装器,而是一个功能完备、可以私有化部署的聊天平台。核心是用Python的FastAPI构建高性能后端&…...
