JavaScript constructor原型原型继承

constructor

在 JavaScript 中,构造函数是一种特殊的函数,使用 new 关键字来调用,用于创建对象实例。JavaScript 中的构造函数通常通过 function 关键字定义。

例如:

function Person(name, age) {this.name = name;this.age = age;
}

在这个例子中,Person 就是一个构造函数,用于创建 Person 类型的对象实例。构造函数内部使用 this 关键字来引用新创建的对象,并给对象赋予属性。

所有的 JavaScript 对象都有一个 constructor 属性,这个属性指向创建该对象的构造函数。例如,如果有一个 person 对象是通过 Person 构造函数创建的,那么 person.constructor 将指向 Person 函数本身。

JavaScript 中的 constructor 属性可以用于检查对象的类型或者动态创建对象,但需要注意的是,这个属性可以被改写,因此不应该完全依赖它来确定对象的类型。


原型(prototype)

在 JavaScript 中,每个对象都有一个原型对象(也称为 __proto__)。原型对象是其他对象的基础,它定义了对象的共享属性和方法。当你创建一个新对象时,该对象会从原型对象继承属性和方法。

  1. 对象原型链

     1)每个 JavaScript 对象(除了 null)都有一个原型链。原型链是通过 __proto__ 属性链接到原型对象的链式结构。  2)如果对象在自身找不到属性或方法,它会沿着原型链向上查找,直到找到该属性或方法或者到达原型链的顶部(即 Object.prototype)。
  2. Object.prototype

      1)Object.prototype 是所有对象的顶层原型对象。它包含 JavaScript 中所有对象共享的基本方法,例如 toString()hasOwnProperty() 等。 2)当你创建一个对象时,这个对象会自动连接到 Object.prototype,并继承其方法。

原型继承

原型继承是 JavaScript 中实现对象继承的一种有效方式,它利用了原型链的特性,使得对象可以共享属性和方法,并能通过原型链查找的方式实现继承。

// 定义一个父类 Person
function Person(name, age) {this.name = name;this.age = age;
}// 在 Person 的原型上添加方法
Person.prototype.greet = function() {return `Hello, my name is ${this.name}.`;
};// 定义一个子类 Student,通过原型链继承 Person
function Student(name, age, school) {// 调用父类的构造函数以初始化父类属性Person.call(this, name, age);this.school = school;
}// 设置 Student 的原型链以继承 Person
Student.prototype = Object.create(Person.prototype);
Student.prototype.constructor = Student;// 在 Student 的原型上添加自己的方法
Student.prototype.study = function() {return `${this.name} is studying at ${this.school}.`;
};// 创建 Student 的实例
let student = new Student('Alice', 20, 'XYZ University');// 调用继承的方法
console.log(student.greet()); // 输出 "Hello, my name is Alice."
console.log(student.study()); // 输出 "Alice is studying at XYZ University."
1.创建父类 Person :
Person 是一个构造函数,它接受 name 和 age 参数,并将它们分配给新创建的对象的属性。 Person.prototype.greet 是一个方法,被Person 的所有实例继承。

 
2.创建子类 student :
Student 构造函数使用 person.ca1l(this,name,age)来调用父类 person 的构造函数,以确保子类实例可以正确初始化父类的属性;   0bject.create(Person.prototype)创建了一个新对象,这个对象的原型指向Person.prototype ,从而建立了 Student 的原型链。
3.继承和添加方法:
Student.prototype 现在包含了  Person.prototype的所有方法,因此 Student 实例可以访问到 greet()方法 ; 在 Student.prototype 上添加了 study()方法,这是 Student 类特有的方法,它不会影响到 Person 类或其它对象。

 
4.实例化和调用方法:
创建 Student 的实例 student 后,可以调用继承自 Person
和自身定义的方法

 instanceof

instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。

object instanceof constructor (object:实例对象,constructor:构造函数)

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

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

相关文章

4.MySQL数据类型

目录 数据类型 ​编辑数值类型 tinyint类型 bit类型 float类型 decimal类型 字符串类型 char类型 varchar varchar和char的区别 日期和时间类型 数据类型 数值类型 说明一下:MySQL本身是不支持bool类型的,当把一个数据设置成bool类型时&#x…

C#复习之封装_构造函数,析构函数,垃圾回收

知识点一:构造函数 基本概念 在实例化对象时 会调用的用于初始化的函数 如果不写 默认存在一个无参构造函数 构造函数的写法 1.没有返回值 2.函数名和类名必须相同 3.没有特殊需求时 一般都是public的 4.构造函数可以被重载 5.this代表当前调用该函数的对象自己 注…

【多线程】synchronized原理

文章目录 一、锁升级 (面试经常考)偏向锁 二、锁消除三、锁粗化锁的粒度 四、相关面试题 结合 锁策略,我们就可以总结出,synchronized具有以下特性: 乐观悲观,自适应重量轻量,自适应自旋挂起等待,自适应非…

Gradio 快速开发网页应用

Gradio 是一个开源的 Python 框架,可以快速开发页面,Gradio 主要用于 AI 模型 Demo 的开发,通过几行代码可以快速生成一个 Web Demo,由于 AI 算法工程师使用的都是 Python 语言,使用 Python 开发 Demo 会相对简单&…

演示:基于WPF的DrawingVisual开发GS(2019)1822号矢量中国地图一

一、目的:基于WPF的DrawingVisual开发的矢量地图 二、预览 默认样式 深黑样式 深蓝色样式 深蓝色透明样式 演示:基于WPF的DrawingVisual开发GS(2019)1822号矢量中国地图二-CSDN博客VS2022,net7演示:基于WPF的DrawingVisual开发GS…

DVWA—SQL(Blind)实例

DVWA—SQL Injection(Blind)实例 预备知识 在SQL注入中会有回显注入和盲注入的形式,在前面的文章中展示了回显注入的情况,而盲注入就是当我输入查询语句的时候数据并不会直接显示在页面中而是以程序员规定的输出格式来进行显示&…

【数据结构和算法】(基础篇二)——链表

链表 数组最麻烦的地方就是其在建立之后大小固定,对于增删数据很不方便。链表的出现解决了这个问题,链表的元素不是在内存中连续存储的,而是通过指针链接在一起的节点集合,这样的设计让链表有了动态的大小。链表是树和图结构的基…

Windows11 WSL2 Ubuntu编译安装perf工具

在Windows 11上通过WSL2安装并编译perf工具(Linux性能分析工具)可以按以下步骤进行。perf工具通常与Linux内核一起发布,因此你需要确保你的内核版本和perf版本匹配。以下是安装和编译perf的步骤: 1. 更新并升级系统 首先&#x…

Unity数据持久化 之 Json序列化与反序列化

语法规则可以看这篇文章:Unity数据持久化 之 Json 语法速通-CSDN博客 Q:Unity是通过什么来对Json文件进行处理的? A:JsonUtility:Unity 提供了 JsonUtility 类,用于将对象序列化为 JSON 字符串或将 JSON 字符串反序列化为对象。…

大数据-72 Kafka 高级特性 稳定性-事务 (概念多枯燥) 定义、概览、组、协调器、流程、中止、失败

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

DC-5靶机渗透测试

DC-5靶场 文章目录 DC-5靶场信息收集漏洞发现漏洞利用 --- 日志文件包含漏洞利用 --- 文件包含过滤器链的RCEshell反弹权限提升 信息收集 使用--scriptvuln扫描发现了一个thankyou.php界面 感觉会有问题,前往访问网站信息 漏洞发现 来到thankyou.php界面&#xff…

haproxy详解

目录 一、haproxy简介 二、什么是负载均衡 2.1 负载均衡的类型 2.2.1 硬件 2.2.2 四层负载均衡 2.2.3 七层负载均衡 2.2.4 四层和七层的区别 三、haproxy的安装及服务信息 3.1 示例的环境部署: 3.2 haproxy的基本配置信息 3.2.1 global 配置参数介绍 3…

sleuth+zipkin分布式链路追踪

概述 结构图 常见的链路追踪 cat zipkin pinpoint skywalking sleuth Sleuth介绍 Trace Span Annotation 使用Sleuth 添加依赖 <!--sleuth--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starte…

运维工具的衍化对运维工作的新挑战

运维工具的衍化对运维工作产生了深远的影响&#xff0c;这些影响体现在多个方面&#xff0c;包括提升运维效率、优化资源配置、增强故障应对能力、促进团队协作与沟通&#xff0c;以及面临新的挑战如数据安全和隐私保护等。运维工具的衍化对运维工作带来了多方面的新挑战&#…

Yolo-World初步使用

Yolo v8目前已经支持Yolo-World&#xff0c;整理一下初步使用步骤。 使用步骤 1 先下载Yolo-World的pt文件&#xff0c;下载地址&#xff1a;GitHub - AILab-CVC/YOLO-World: [CVPR 2024] Real-Time Open-Vocabulary Object Detection 官网应该是点这里&#xff08;有个笑脸…

【C#】读取与写入txt文件内容

在 C# 中读取和写入文本文件内容是一个常见的任务。以下是使用几种不同方法读取和写入文本文件的示例。 一、读取txt文件内容 1.1 使用 StreamReader using System; using System.IO;class Program {static void Main(){string filePath "C:\path\to\your\file.txt&qu…

QT多语言工具实现支持生成ts文件,ts文件和xlsx文件互转

一. 工具介绍 1.如果你是Qt项目,为多语言发愁的话,看到这篇文件,恭喜你有福啦!工具截图如下:​ 2.在项目开发的过程中,尽量将所有需要翻译的文本放在一个文件中,qml翻译用一个文件,cpp用一个,如下: test.h #pragma once /******************************************…

Java面试篇(线程池相关专题)

文章目录 1. 为什么要使用线程池2. 线程池的核心参数和线程池的执行原理2.1 线程池的核心参数2.2 线程池的执行原理 3. 线程池中常见的阻塞队列3.1 常见的阻塞队列3.2 ArrayBlockingQueue 和 LinkedBlockingQueue 的区别 4. 如何确定线程池的核心线程数4.1 应用程序中任务的类型…

【代码随想录】长度最小的子数组——滑动窗口

本博文为《代码随想录》的学习笔记。原文链接&#xff1a;代码随想录 题目 原题链接&#xff1a;长度最小的子数组 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl1, ..., numsr-1, nums…

历史库,成本与性能如何兼得?| OceanBase应用实践

随着数据量的迅猛增长&#xff0c;企业和组织在数据库管理方面遭遇的挑战愈发凸显。数据库性能逐渐下滑、存储成本节节攀升&#xff0c;以及数据运维复杂性的增加&#xff0c;这些挑战使得DBA和开发者在数据管理上面临更大的压力。 为了应对这些挑战&#xff0c;对数据生命周期…