js原型和new过程

在JavaScript中,原型和继承是实现代码复用和扩展的重要机制。而new关键字则是用来创建对象的。

原型(Prototype):
在JavaScript中,每个对象都有一个原型(prototype)对象,这个原型对象本身也有一个原型,这个过程一直持续下去,直到达到一个对象的原型为null,这个对象就是最顶层的原型。

JavaScript中的函数都有一个prototype属性,这个属性是一个指针,指向一个对象,这个对象的用途是为所有通过这个函数创建的对象提供共享的属性和方法。这就是所谓的原型链。

继承:
JavaScript中的继承是通过原型链实现的。当试图访问一个对象的属性时,JavaScript会在该对象本身上查找这个属性,如果没有找到,那么就会在对象的原型上查找,这个过程会一直持续到原型为null。如果还是找不到,那么就返回undefined。

new过程:
JavaScript中的new关键字是用来创建一个对象的。new后面跟着一个函数,这个函数被调用时返回一个新创建的对象。这个新创建的对象会继承构造函数(也就是new后面的函数)的prototype对象上的属性和方法。

例如:
function Person(name) {
this.name = name;
}
Person.prototype.sayHello = function() {
console.log('Hello, my name is ’ + this.name);
};
var john = new Person(‘John’);
john.sayHello(); // 输出 “Hello, my name is John”

在这个例子中,我们定义了一个Person函数,然后给它的prototype对象添加了一个sayHello方法。然后我们使用new Person(‘John’)创建了一个新的Person对象john,这个对象继承了Person的prototype对象上的sayHello方法。

在JavaScript中,我们可以通过在原型对象上定义属性和方法,来实现代码的复用和继承。以下是如何在原型中定义属性和方法的例子:

// 定义一个动物原型
var Animal = function() {};

// 在原型中定义方法
Animal.prototype.move = function() {
console.log(‘This animal can move.’);
};

// 在原型中定义属性
Animal.prototype.numLegs = 0;

// 创建一个动物实例
var dog = new Animal();

// 调用从原型继承的方法
dog.move(); // 输出 “This animal can move.”

// 访问从原型继承的属性
console.log(dog.numLegs); // 输出 0

在这个例子中,我们首先定义了一个Animal的函数,然后通过Animal.prototype来添加属性和方法。这样,任何通过new Animal()创建的对象都会继承这些属性和方法。

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

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

相关文章

Docker查找docker组及用户

查找所有组及用户: cat /etc/passwd 可以查看所有用户的列表w 可以查看当前活跃的用户列表cat /etc/group 查看用户组在/etc/group 中的每条记录分四个字段: 第一字段:用户组名称; 第二字段:用户组密码; 第…

快速前端开发01

前端开发 1 前端开发1.快速开发网站2.浏览器能识别的标签2.1 编码(head)2.2 title(head)2.3 标题2.4 div和span2.4.5 超链接2.4.6 图片小结2.4.7 列表2.4.8 表格2.4.9 input系列(7个)2.4.10 下拉框2.4.11 多…

php踩坑:ajax向php提交整型值,$_POST中获取到的却是string类型的值

前端ajax提交number类型的值-1: $.ajax({url : theUrl,data : {data: {s: -1} // s是整数值-1},type: post,success: function(data) {console.log(data);} }php端获取到的却是string类型的"-1": $data$_POST[data]; // {"s":&…

Flask 项目怎么配置并创建第一个小项目?附上完成第一个小案例截图

目录 1. 为什么要学习 flask? 2. flask 是什么? 3. flask 如何使用? 要安装 Flask,可以按照以下步骤进行: 4. 使用流程 4.1. 新建项目 4.1.1. 打开 pycharm,新建项目 4.1.2. 设置目录,并…

MySql前言

🎥 个人主页:Dikz12🔥个人专栏:MySql📕格言:那些在暗处执拗生长的花,终有一日会馥郁传香欢迎大家👍点赞✍评论⭐收藏 目录 数据库有哪些软件?? Mysql MySql数…

一道使用LinkedList和Stack解决的算法题

一、无法吃午餐的学生数量 学校的自助午餐提供圆形和方形的三明治,分别用数字 0 和 1 表示。所有学生站在一个队列里,每个学生要么喜欢圆形的要么喜欢方形的。 餐厅里三明治的数量与学生的数量相同。所有三明治都放在一个 栈 里,每一轮&#…

华为手表开发:WATCH 3 Pro(10)获取心率_java 华为手表获取心跳

华为手表开发:WATCH 3 Pro(10)获取心率_java 华为手表获取心跳 Excerpt 文章浏览阅读1.2k次。鸿蒙开发,获取手表心跳,按钮点击后触发的方法,我们将跳转页面的代码写在这个位置就可以实现点击按钮进行跳转页面的动作。在HTML文件“index.hml”,添加按钮,这里按钮用到是标…

14.鸿蒙HarmonyOS App(JAVA)时钟组件计时器倒计时单选按钮复选框开关switch与开关按钮ToggleButton图像组件示范

鸿蒙HarmonyOS App(JAVA) 时钟组件 计时器 倒计时 单选按钮 复选框 开关switch 开关按钮ToggleButton 图像组件 ability_main.xml <?xml version"1.0" encoding"utf-8"?> <DirectionalLayoutxmlns:ohos"http://schemas.huawei.co…

HarmonyOS4.0系列——05、状态管理之@Prop、@Link、@Provide、@Consume,以及@Watch装饰器

状态管理 看下面这张图 Components部分的装饰器为组件级别的状态管理&#xff0c;Application部分为应用的状态管理。开发者可以通过StorageLink/LocalStorageLink 实现应用和组件状态的双向同步&#xff0c;通过StorageProp/LocalStorageProp 实现应用和组件状态的单向同步。…

同一对象放入集合转换成json异常记录

1、错误格式 [{"conditions":[{"field":"name","logic":"","relationship":"EQ"}],"logic":"AND"},{"$ref":"$[0]"}] 2、产生错误原因 单个对象想产生多条数…

关于群晖ARPL界面能出现ip但是使用Synology Assistant搜索不到ip问题 及解决方法

文章引用ing304 频道文章&#xff1a;https://qun.qq.com/qqweb/qunpro/share?_wv3&_wwv128&appChannelshare&inviteCode20jx8dPsU2z&contentID1m4NKs&businessType2&from181174&shareSource5&bizka 前言 当进入该界面后 提示IP无法访问&a…

【学习心得】图解Git命令

图解Git命令的图片是在Windows操作系统中的Git Bash里操作截图。关于Git的下载安装和理论学习大家可以先看看我写的另两篇文章。链接我放在下面啦&#xff1a; 【学习心得】Git快速上手_git学习心得-CSDN博客 【学习心得】Git深入学习-CSDN博客 一、初始化仓库 命令&#xff…

eBPF运行时安全

引言 eBPF作为当前linux系统上最为炙手可热的技术&#xff0c;通常被用于网络流量过滤和分析、系统调用跟踪、性能优化、安全监控&#xff0c;当下比较知名的项目有Cilium、Falco等。 Cilium 是一个开源的容器网络和安全性项目&#xff0c;致力于提供高效的容器通信和强大的安…

2023.12.16

邻接矩阵构造 typedef struct {int arcs[MaxVexNum][MaxVexNum];int vexnum, arcnum; } AMGraph; 其中&#xff0c;arc是一个二维数组&#xff0c;用于表示各个顶点之间的边的关系。vexnum表示图中顶点的数量&#xff0c;arcnum表示图中边的数量。 示例 AMGraph graph;…

Java代码审计FastJson反序列化利用链跟踪动态调试autoType绕过

目录 0x00 前言 0x01 基础参考 JNDI注入实例 使用type加入User类解析 FastJson历史漏洞简介 0x02 FastJson 1.2.24 利用链分析 调试过程 构造Poc思路 CC链关键流程 0x03 FastJson 1.2.25-1.2.47 利用链分析 1、开启autoTypeSupport&#xff1a;1.2.25-1.2.41 调试过…

Redis学习指南(12)-Redis的bitmap数据类型介绍

Redis是一款高性能的键值数据库&#xff0c;其中提供了多种数据类型来满足各种需求。其中&#xff0c;Bitmap&#xff08;位图&#xff09;数据类型是一种非常有用且强大的数据结构&#xff0c;它可以在非常小的空间内存储大量的位信息。在本文中&#xff0c;我们将介绍Redis的…

含并行连结的网络(GoogLeNet)

目录 1.GoogLeNet 2.代码 1.GoogLeNet inception不改变高宽&#xff0c;只改变通道数。GoogLeNet也大量使用1*1卷积&#xff0c;把它当作全连接用。 V3耗内存比较多&#xff0c;计算比较慢&#xff0c;但是精度比较准确。 2.代码 import torch from torch import nn from t…

MATLAB - 使用运动学 DH 参数构建机械臂

系列文章目录 前言 一、 使用 Puma560 机械手机器人的 Denavit-Hartenberg (DH) 参数&#xff0c;逐步建立刚体树形机器人模型。在连接每个关节时&#xff0c;指定其相对 DH 参数。可视化机器人坐标系&#xff0c;并与最终模型进行交互。 DH 参数定义了每个刚体通过关节与其父…

非常好用的Mac清理工具CleanMyMac X 4.14.7 如何取消您对CleanMyMac X的年度订购

CleanMyMac X 4.14.7是Mac平台上的一款非常著名同时非常好用的Mac清理工具。全方位扫描您的Mac系统&#xff0c;让垃圾无处藏身&#xff0c;您只需要轻松单击2次鼠标左键即可清理数G的垃圾&#xff0c;就这么简单。瞬间提升您Mac速度。 CleanMyMac X 4.14.7下载地址&#xff1a…

基于LabVIEW的声音信号采集分析系统开发

摘要&#xff1a;以美国国家仪器(NI)公司开发的LabVIEW虚拟仪器为软件开发平台&#xff0c;设计了一个可以同步实现声音信号采集和分析的多功能模块化软件系统&#xff0e;借助LabVIEW图形化软件相应的声音读取、写入和存储函数实现对声音信号的采集、存储、时域分析和频域分析…