前端面试题38(js原型与对象)

在这里插入图片描述
在JavaScript中,原型(prototype)是核心特性之一,它用于实现对象之间的继承和属性方法的共享。理解原型和对象的关系对于深入学习JavaScript至关重要。下面我会详细解释这两个概念以及它们是如何工作的,并给出一些示例代码。

基本概念

  1. 对象:在JavaScript中,几乎一切都是对象。对象是一种数据结构,用于存储键值对(属性-值)。你可以创建字面量对象,也可以通过构造函数创建对象。

  2. 原型:每个JavaScript对象(除null外)都有一个内置属性,称为__proto__,它指向该对象的原型。原型也是一个对象,用于继承属性和方法。当试图访问一个对象的属性或方法时,如果对象本身没有这个属性或方法,JavaScript引擎会继续在其原型对象上查找,这个过程会一直向上追溯到原型链的顶端(通常是Object.prototype)。

原型链

  • 原型链:通过对象的__proto__链接起来的一系列原型对象就构成了原型链。这个机制使得一个对象可以继承另一个对象的属性和方法。

示例代码

1. 使用构造函数和原型扩展对象
function Person(name) {this.name = name; // 实例属性
}// 添加方法到Person的原型上
Person.prototype.sayHello = function() {console.log("Hello, my name is " + this.name);
};// 创建Person的实例
var person1 = new Person("Alice");
var person2 = new Person("Bob");// 调用从原型继承来的方法
person1.sayHello(); // 输出: Hello, my name is Alice
person2.sayHello(); // 输出: Hello, my name is Bobconsole.log(person1.__proto__ === Person.prototype); // true,显示person1的原型是Person的原型对象
2. 查看原型链
console.log(Object.getPrototypeOf(person1)); // 直接获取person1的原型对象,等同于person1.__proto__
console.log(Person.prototype.constructor === Person); // true,显示Person构造函数的constructor属性指向其自身
console.log(person1.__proto__.__proto__); // 继续向上查找原型链,最终到达Object.prototype

总结

通过原型链,JavaScript实现了面向对象编程中的继承机制,允许对象共享方法和属性,同时保持了每个实例的独特性。理解原型和原型链对于编写高效、可维护的JavaScript代码至关重要。

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

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

相关文章

Java设计模式---(创建型模式)工厂、单例、建造者、原型

目录 前言一、工厂模式(Factory)1.1 工厂方法模式(Factory Method)1.1.1 普通工厂方法模式1.1.2 多个工厂方法模式1.1.3 静态工厂方法模式 1.2 抽象工厂模式(Abstract Factory) 二、单例模式(Si…

鸿蒙开发:Universal Keystore Kit(密钥管理服务)【密钥协商(ArkTS)】

密钥协商(ArkTS) 以协商密钥类型为X25519 256,并密钥仅在HUKS内使用为例,完成密钥协商。 开发步骤 生成密钥 设备A、设备B各自生成一个非对称密钥,具体请参考[密钥生成]或[密钥导入]。 密钥生成时,可指定参数HUKS_TAG_DERIVE…

LLM-文本分块(langchain)与向量化(阿里云DashVector)存储,嵌入LLM实践

文章目录 前言向量、令牌、嵌入分块按字符拆分按字符递归拆分按token拆分 向量化使用 TextEmbedding 实现语义搜索数据准备通过 DashScope 生成 Embedding 向量通过 DashVector 构建检索:向量入库语义检索:向量查询完整代码 总结 前言 Transformer 架构…

[C++][ProtoBuf][Proto3语法][三]详细讲解

目录 1.默认值2.更新消息1.更新规则2.保留字段reserved 3.未知字段1.是什么?2.未知字段从哪获取 4.前后兼容性5.选项option1.选项分类2.常用选项列举3.设置自定义选项 1.默认值 反序列化消息时,如果被反序列化的⼆进制序列中不包含某个字段,…

基于Spring Boot的旅游信息推荐信息系统设计与实现(源码+lw+部署+讲解)

技术指标 开发语言:Java 框架:Spring BootJSP JDK版本:JDK1.8 数据库:MySQL5.7 数据库工具:Navicat16 开发软件:IDEA Maven包:Maven3.6.3 浏览器:IE浏览器 功能描述 旅游信…

Hadoop-19 Flume Agent批量采集数据到HDFS集群 监听Hive的日志 操作则把记录写入到HDFS 方便后续分析

章节内容 上一节我们完成了内容: Flume 启动测试Flume Conf编写Flume 测试发送和接收数据 背景介绍 这里是三台公网云服务器,每台 2C4G,搭建一个Hadoop的学习环境,供我学习。 之前已经在 VM 虚拟机上搭建过一次,但…

深入探索大语言模型

深入探索大语言模型 引言 大语言模型(LLM)是现代人工智能领域中最为重要的突破之一。这些模型在自然语言处理(NLP)任务中展示了惊人的能力,从文本生成到问答系统,无所不包。本文将从多个角度全面介绍大语…

AGE agtype 简介

AGE 使用一种名为 agtype 的自定义数据类型,这是 AGE 返回的唯一数据类型。agtype 是 Json 的超集,也是 JsonB 的自定义实现。 简单数据类型 Null 在Cypher中,null用于表示缺失或未定义的值。概念上,null表示“缺失的未知值”&…

路径规划 | 基于蚁群算法的三维无人机航迹规划(Matlab)

目录 效果一览基本介绍程序设计参考文献 效果一览 基本介绍 基于蚁群算法的三维无人机航迹规划(Matlab)。 蚁群算法(Ant Colony Optimization,ACO)是一种模拟蚂蚁觅食行为的启发式算法。该算法通过模拟蚂蚁在寻找食物时…

【安全设备】Web应用防火墙

一、什么是Web应用防火墙 Web应用程序防火墙(Web Application Firewall)的缩写是WAF,用于保护Web应用程序免受各种恶意攻击和漏洞利用。WAF通过监控和过滤进出Web应用程序的HTTP/HTTPS流量来工作。它位于Web应用程序和用户之间,分…

【总线】AXI第九课时:介绍AXI响应信号 (Response Signaling):RRESP和 BRESP

大家好,欢迎来到今天的总线学习时间!如果你对电子设计、特别是FPGA和SoC设计感兴趣,那你绝对不能错过我们今天的主角——AXI4总线。作为ARM公司AMBA总线家族中的佼佼者,AXI4以其高性能和高度可扩展性,成为了现代电子系统中不可或缺的通信桥梁…

STM32F103RB多通道ADC转换功能实现(DMA)

目录 概述 1 硬件 1.1 硬件实物介绍 1.2 nucleo-f103rb 1.3 软件版本 2 软件实现 2.1 STM32Cube配置参数 2.2 项目代码 3 功能代码实现 3.1 ADC功能函数 3.2 函数调用 4 测试 4.1 DMA配置data width:byte 4.2 DMA配置data width:Half wor…

java如何实现一个死锁 ?

死锁(Deadlock)是指在并发系统中,两个或多个线程(或进程)因争夺资源而互相等待,导致它们都无法继续执行的一种状态。 一、简易代码 public class DeadlockExample {private static final Object lock1 = new Object();private

如何在 ASP.NET MVC 项目中使用身份验证器应用程序实现多因素身份验证?

介绍 增强安全性对于任何应用程序都至关重要,而多因素身份验证 (MFA) 是实现此目标的有效方法。在本文中,我们将介绍在 ASP.NET MVC 项目中使用身份验证器应用程序集成 MFA 的过程。无论您是从头开始还是将 MFA 添加到现有项目,本指南都将提…

生物素标记降钙素Biotin-α-CGRP, rat 中间体

生物素标记降钙素Biotin-α-CGRP, rat 中间体是一种特定的生物化学试剂,主要用于科学研究领域。以下是对该产品的详细介绍: 一、基本信息 产品名称:生物素标记降钙素Biotin-α-CGRP, rat 中间体 英文名称:Biotin-α-CGRP, rat 纯度…

Qt 线程同步机制 互斥锁 信号量 条件变量 读写锁

qt线程同步 Qt提供了丰富的线程同步机制来帮助开发者更高效和安全地进行多线程编程。其主要包括: QMutex:为共享数据提供互斥访问能力,避免同时写入导致的数据冲突。利用lock()/unlock()方法实现锁定和解锁。 QReadWriteLock:读写锁,允许多个读线程同时访问,但写操作需要独占…

springboot社区物资交易互助平台+lw+源码+调试+讲解

第3章 系统分析 用户的需求以及与本系统相似的在市场上存在的其它系统可以作为系统分析中参考的资料,分析人员可以根据这些信息确定出本系统具备的功能,分析出本系统具备的性能等内容。 3.1可行性分析 尽管系统是根据用户的要求进行制作,但…

windows USB 设备驱动开发-USB带宽

本文讨论如何仔细管理 USB 带宽的指导。 每个 USB 客户端驱动程序都有责任最大程度地减少其使用的 USB 带宽,并尽快将未使用的带宽返回到可用带宽池。 在这里,我们认为USB 2.0 的速度是480Mbps、12Mbps、1.5Mbps,这分别对应高速、全速、低速…

Python面试宝典第9题:买卖股票

题目 给定一个整型数组,它的第i个元素是一支给定股票第i天的价格。如果最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。 示例 1&#…

LabVIEW平台从离散光子到连续光子的光子计数技术

光子计数技术用于将输入光子数转换为离散脉冲。常见的光子计数器假设光子是离散到达的,记录到来的每一个光子。但是,当两个或多个光子同时到达时,计数器会将其记录为单个脉冲,从而只计数一次。当连续光子到达时,离散光…