JavaScript基础(13)_原型、原型对象

news2025/1/10 17:07:05

上一章构造函数确实简化了多个对象创建的麻烦问题,但是:构造函数每创建一个实例,构造函数就会执行一次,将属性和方法添加到该对象,每个对象实例化后地址互不相同,即使它们的方法所实现的逻辑和功能一样,但确不是同一个方法,这样每次调用,系统都会开辟空间来创建一个(实现同一个逻辑和功能的)方法,从而影响性能,这样的代码显得多余。那么可不可以放全局域中吗?可以,但是会占用全局域命名空间(别的函数不能再同名),而且定义在全局作用域中会很不安全(其他程序员万一同名了,代码就乱了)。因此,我们有必要优化代码。可不可以让相同的属性或方法放在公共区域,被多个实例化的不同对象调用呢

    <script>
         function Person(name,age,grade,id)
        {
            this.name = name;
            this.age = age;
            this.grade = grade;
            this.show_id = function()
            {
                console.log(this.id);
            }
        }
        var per11 = new Person("张三",16,6,"0001");
        var per22 = new Person("李四",21,8,"0002");
        // 结果:false,证明对象实例化后方法不一样。
        console.log(per11.show_id == per22.show_id);
    </script>

原型、原型对象
原型(prototype):是函数的一个特殊属性,即指针指向原型对象。 
原型对象(prototype object):是一个属于其所在函数的空对象,可以添加属性和方法。其自身constructor属性指向其函数。

解释:
原型对象相当于一个公共的区域,同一个类(构造函数)的实例化的对象都可以访问到这个原型对象。为了优化性能,我们可以将该类中共有的属性和方法统一放入到原型对象中。

对应关系:
1、每一个对象都有一个属性叫__proto__,它指向了一个对象,这个对象我们叫原型对象。
2、每一个构造器(类,函数),也是对象,也有一个属性叫prototype,它也指向一个对象,和__proto__指向同一个对象,也是原型对象。
3、每一个原型对象上,都是有一个属性叫constructor,它指向此原型对象所对应的构造器。

访问机制(原型链):
当我们访问对象的一个属性或方法时,它会先在对象自身中寻找,如果有则直接使用,如果没有则就沿着__proto__会去原型对象中寻找,如果找到则直接使用,如果没用则去原型的原型中寻找,直到找到Object对象的原型,Object对象的原型没有原型,如果在Object中还没有找到则返回undefined。

原型对象的用法:
1、利用对象的动态特性完成添加
语法:构造函数名.prototype.xxxx=yyyy
2、直接替换
语法:构造函数名.prototype={};

示例:

    <script>
        function Person(name,age,grade)
        {
            this.name = name;
            this.age = age;
            this.grade = grade;
        }
        // 把方法放入原型对象
            Person.prototype.show_id = function(id){
                console.log(id);
            }
        // 实例化一个对象per11
        var per11 = new Person("张三",16,6);
        per11.show_id("0001"); 
        console.log(per11);
        // 修改原型对象内容
        Person.prototype = 
        {
            show_id:function(id) 
            {
                console.log("您的id号为",id);
            }             
        }
        // 修改原型对象后,再实例化对象per22
        var per22 = new Person("李四",21,8);
        per11.show_id("0001"); 
        per22.show_id("0002"); 
    </script>

解析图所示:

运行结果:

  

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

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

相关文章

pytorch初学笔记(八):神经网络之卷积操作

目录 一、卷积操作 二、二维卷积操作 2.1 torch.nn.functional 2.2 conv2d方法介绍 2.2.1 使用该方法需要引入的参数 2.2.2 常用参数 2.2.3 关于对input和weight的shape详解 三、代码实战 3.1 练习要求 3.2 tensor的reshape操作 3.3 不同stride的对比 3.4 不同pad…

Docker面试

1. Docker和虚拟机的区别&#xff1f; 虚拟机Virtual Machine与容器化技术&#xff08;代表Docker&#xff09;都是虚拟化技术&#xff0c;两者的区别在于虚拟化的程度不同。 隔离性 由于vm对操作系统也进行了虚拟化&#xff0c;隔离的更加彻底。而Docker共享宿主机的操作系统…

数字化转型总体需求

基于“两型三化九力”对企业数字化的要求&#xff0c;以建设产品全生命周期管理平台为手段和途径&#xff0c;打通设计、工艺、制造及交付服务的全生命周期的数字线&#xff0c;实现数字化设计、数字化仿真、数字化制造、数字化服务及数字化管理&#xff0c;未来以此为基础实现…

【计算机毕业设计】11.毕业生信息管理系统+vue

一、系统截图&#xff08;需要演示视频可以私聊&#xff09; 摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 毕业生信息招聘平台&#xff0c;主要的模块包括查看管理员&#xff1b;首页、个…

zk常用命令ls、ls2、get、stat,参数意思(重补早期学习记录)

前言:补学习记录,几年前写一半丢草稿箱,突然看到,有强迫症所以补完 1.连接zk客户端(进入zk后台) ./zkCli.sh 连接成功 使用help查看有哪些命令可以使用 试试ls和ls2的区别 ls显示指定路径下的目录 ls2不仅可以 显示指定路径下的目录,还可以显示该节点的相关状态信息…

OpenGL 单色

目录 一.OpenGL 单色图 1.IOS Object-C 版本1.Windows OpenGL ES 版本2.Windows OpenGL 版本 二.OpenGL 单色 GLSL Shader三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >…

非关系型数据库MongoDB是什么/SpringBoot如何使用或整合MongoDB

写在前面&#xff1a; 继续记录自己的SpringBoot学习之旅&#xff0c;这次是SpringBoot应用相关知识学习记录。若看不懂则建议先看前几篇博客&#xff0c;详细代码可在我的Gitee仓库SpringBoot克隆下载学习使用&#xff01; 3.4.3.3 Mongodb 3.4.3.3.1 介绍 MongoDB是一个开…

【Tomcat专题】Tomcat如何打破双亲委派机制?

文章目录类加载器双亲委派机制双亲委派的好处Tomcat的类加载器loadClass总体加载步骤&#xff1a;类加载器 三种JDK内部的类加载器 启动类加载器&#xff08;BootStrap ClassLoader&#xff09; 负责加载JRE\lib下的rt.jar、resources.jar、charsets.jar包中的class。 扩展…

一文带你搞懂sklearn.metrics混淆矩阵

一般的二分类任务需要的评价指标有4个 accuracyprecisionrecallf1-score 四个指标的计算公式如下 计算这些指标要涉及到下面这四个概念&#xff0c;而它们又构成了混淆矩阵 TP (True Positive)FP (False Positive)TN (True Negative)FN (False Negative) 混淆矩阵实际值01预测…

周杰伦腾格尔晚上八点同时开线上演唱会,究竟是巧合还是刻意安排

从日历上面看&#xff0c;2022年11月19日&#xff0c;是一个再平凡不过的日子&#xff0c;不过有了周杰伦和腾格尔的加持&#xff0c;这个平凡的日子也变得不平凡了。根据腾格尔老师本人透露&#xff0c;他准备在11月19日&#xff0c;在某音平台开启线上演唱会&#xff0c;为歌…

智慧实验室解决方案-最新全套文件

智慧实验室解决方案-最新全套文件一、建设背景二、建设架构智慧实验室建设核心目标三、建设方案四、获取 - 智慧实验室全套最新解决方案合集一、建设背景 当前高校和中小学的智慧校园建设正如火如荼地进行中&#xff0c;智慧实验室建设属于“智慧校园”建设的重要组成部分之一…

ctf_BUUCTF_web(1)

文章目录BUUCTF_webSQL注入1. [极客大挑战 2019]EasySQL2. [SUCTF 2019]EasySQL3.[强网杯 2019]随便注4.[极客大挑战 2019]BabySQL5.[BJDCTF2020]Easy MD56.[极客大挑战 2019]HardSQL7.[GXYCTF2019]BabySQli8.[GYCTF2020]Blacklist9.[CISCN2019 华北赛区 Day2 Web1]Hack World1…

面试:HTTP 的长连接和短连接

https://www.cloudflare.com/zh-cn/learning/ddos/syn-flood-ddos-attack/ 一文搞懂 HTTP 的长连接和短连接_文晓武的博客-CSDN博客 1、HTTP 协议与 TCP/IP 协议的关系 HTTP 的长连接和短连接本质上是 TCP 长连接和短连接。HTTP 属于应用层协议&#xff0c;在传输层使用 TCP…

区块链交易明细中各字段的含义

Transaction Hash&#xff1a;标识本次交易的 hashStatus&#xff1a;交易状态Block&#xff1a;7768188 表示本次块高&#xff0c;217034 表示在 7768188 后面又新挖的区块数量&#xff0c;该数值会随着新区块增加而不断增长Timestamp&#xff1a;交易成功的时间戳From&#x…

直流无刷电机(BLDC)转速闭环调速系统及Matlab/Simulink仿真分析

文章目录前言一、转速闭环直流调速系统二、Matlab/Simulink仿真2.1.仿真电路分析2.2.仿真结果分析总结前言 变压调速是直流调速系统的主要调速方法&#xff0c;因此系统的硬件至少包含&#xff1a;可调直流电源和直流电机两部分。可调直流电源多采用直流PWM变换器&#xff0c;…

v-for的用法及key值原理

v-for的用途&#xff1a; &#xff08;1&#xff09;关键字&#xff1a; v-for遍历的时候&#xff0c;关键字有两个&#xff1a;in、of&#xff1a;两个关键字没有区别&#xff0c;用哪一个都行&#xff1b; &#xff08;2&#xff09;支持对象、数组、数字遍历&#xff1a…

java线程生命周期

如图 java线程的生命周期主要分为 新建: :新建这一刻 他会创建出一个线程对象 这个就是我们通过new线程类 这部操作实现的 当我们通过new出来的线程对象 执行 start方法之后 他就会进入第二个生命周期 就绪: 在这个过程中 他有执行资格 就是他是可以执行线程的程序的 但这个阶…

zk中session的基本原理、create、set、delete命令的使用(重补早期学习记录)

前言:补学习记录,几年前写一半丢草稿箱,突然看到,有强迫症所以补完 一、session基本原理 二、创建节点 create [-s] | [-e] 路径 数据 权限 还是一样的连接zk客户端 ./zkCli.sh 使用help查看命令 我们创建一个父节点,并存入数据 使用get来或者它的数据和状态信息 状态参…

【LeetCode】Day187-分割回文串

题目 131. 分割回文串【中等】 题解 如何判断字符串是回文串&#xff1f; 使用动态规划&#xff1a;f[i][j]代表s[i…j]是否是回文串&#xff0c;则有状态转移方程如下&#xff0c; 有了f[i][j]&#xff0c;如何分割回文串&#xff1f; 利用回溯搜索&#xff0c;当s[0…i-1…

Spring参数校验

如何使用 Spring提供了简便的参数校验注解&#xff0c;不需要像以前一样if else去判断了&#xff0c;下面记录一下如何使用注解实现参数的校验 导入坐标 要使用各种注解完成参数的校验&#xff0c;需要导入hibernate-validator坐标以实现 <dependency><groupId>…