Javascript借用原型对象继承父类型方法

news2024/11/19 3:43:13

借用原型对象继承父类型方法

目的: 儿子继承父类属性和方法,父类之后新增的方法不会被儿子继承。

前言:

先理解一个问题:

Son.prototype = Father.prototype; 这一操作相当于把Son的原型对象指向Father。

意味着Son的prototype的地址与Father一致,如果我给Son新增函数,那么Father也会同步新增。

在这里插入图片描述

具体代码:

function Father(uname, age) {
    this.uname = uname;
    this.age = age;
}
Father.prototype.money = function() {
    console.log(100000);

};
function Son(uname, age, score) {
    Father.call(this, uname, age);
    this.score = score;
}
Son.prototype = Father.prototype;

let son = new Son('刘德华', 18, 100);
console.log(Son.prototype);
console.log(Father.prototype);

结果:

在这里插入图片描述

分析:

我们的初衷是,儿子继承父类属性和方法,父类之后新增的方法不会被儿子继承。

很明显儿子和父亲的成员函数和属性都一致,这是由于儿子和父类地址一致导致的。


解决方案:

Son.prototype = new Father();

首先用new创建一个父类的实例对象,然后让Son的原型对象指向这个新创建的对象即可。

在这里插入图片描述

从下往上理解:

Son原型对象:指向Father实例对象,继承Father实例对象的属性和方法

Father实例对象:含有__proto__属性,可以使用Father原型对象的新增的方法

Father原型对象:可以新增函数

此时,如果Son新增函数,由于Son和Father实例对象地址一致,只会影响到Father实例对象,而不会影响到Father原型对象上。


总结:

将子类所共享的方法提取出来,让子类的 prototype 原型对象 = new 父类()

通过父类实例化对象,开辟额外空间,就不会影响原来父类的原型对象。

有一说一,采用了深拷贝的思想。

  • Code:

    // 借用父构造函数继承属性
    // 1. 父构造函数
    function Father(uname, age) {
        // this 指向父构造函数的对象实例
        this.uname = uname;
        this.age = age;
    }
    Father.prototype.money = function() {
        console.log(100000);
    
    };
    // 2 .子构造函数 
    function Son(uname, age, score) {
        // this 指向子构造函数的对象实例
        Father.call(this, uname, age);
        this.score = score;
    }
    // Son.prototype = Father.prototype;  这样直接赋值会有问题,如果修改了子原型对象,父原型对象也会跟着一起变化
    Son.prototype = new Father();
    // 如果利用对象的形式修改了原型对象,别忘了利用constructor 指回原来的构造函数
    Son.prototype.constructor = Son;
    // 这个是子构造函数专门的方法
    Son.prototype.exam = function() {
        console.log('孩子要考试');
    
    }
    var son = new Son('刘德华', 18, 100);
    console.log(son);
    console.log(Father.prototype);
    console.log(Son.prototype.constructor);
    

参考:

可以看这两集

https://www.bilibili.com/video/BV1DY41177dM?p=37&spm_id_from=pageDriver&vd_source=30a98e03cd5a7bbfaeb4416fc48542e2

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

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

相关文章

Vue基础学习 v-指令(2) 本地应用(记事本)

v-bind 设置元素的属性&#xff08;比如&#xff1a;src&#xff0c;title&#xff0c;class&#xff09; v-bind:属性名值 <div id"app"><img v-bind:src"imgSrc" alt"" v-bind:title"imgTitle"></div><scrip…

数学建模(一):LP 问题

文章目录数学建模&#xff08;一&#xff09;&#xff1a;LP 问题一、 MATLAB求解二、 Python 求解数学建模&#xff08;一&#xff09;&#xff1a;LP 问题 在人们的生产实践中&#xff0c;经常会遇到如何利用现有资源来安排生产&#xff0c;以取得最大经济效益的问题。此类问…

关于分布式事务的理解

关于分布式事务的理解 分布式事务之前先简单介绍下介于本地事务和分布式事务之间的两个事务&#xff1a;全局事务&#xff08;Global Transactions&#xff09;和共享事务&#xff08;Share Transactions&#xff09;的原理与实现。 先给全局事务做个限定&#xff1a;一种适用…

JVM运行时数据区划分

Java内存空间 内存是非常重要的系统资源&#xff0c;是硬盘和cpu的中间仓库及桥梁&#xff0c;承载着操作系统和应用程序的实时运行。JVM内存布局规定了JAVA在运行过程中内存申请、分配、管理的策略&#xff0c;保证了JVM的高效稳定运行。不同的jvm对于内存的划分方式和管理机…

使用secure crt连接ensp中虚拟设备

0 前言 ensp中虚拟设备如路由器、防火墙等本质上是 virtualbox中运行的虚机&#xff0c;因此可通过 telnet 连接 127.0.0.1 及对应端口方式连接到ensp中设备&#xff1b; 1 连接方法 1.1 查看设备所监听端口 设备图标上&#xff0c;右键 设置 点击 配置&#xff0c;可查看到…

UGUI 上使用 Particle System 支持 Sorting Layer 排序渲染

UGUI 上使用 Particle System 支持 Sorting Layer 排序渲染 Unity 中 Particle System 在 UGUI 上是可以根据 Sorting Layer 以及 Order in Layer 和 UI 组件(Image、Text等) 排序渲染的 Layer 值高的能够遮挡 Layer 值低的 组件 开发中会有这样的需求&#xff1a;要求 Part…

CAD异形图形的绘制

这个CAD图形的难点在于如何画角度98长165的斜线&#xff0c;剩下的图形就很好画了&#xff0c;那么用到的命令有圆、直线、导圆角、偏移等多个CAD命令的结合 目标对象 操作步骤 1.先使用直线命令画相交于A点的两条辅助线段&#xff0c;然后以A点为圆心画半径47.5和直径65的圆…

Java -数据结构,【优先级队列 / 堆】

一、二叉树的顺序存储 在前面我们已经讲了二叉树的链式存储&#xff0c;就是一棵树的左孩子和右孩子 而现在讲的是&#xff1a;顺序存储一棵二叉树。 1.1、存储方式 使用数组保存二叉树结构&#xff0c;方式即将二叉树用层序遍历方式放入数组中。 一般只适合表示完全二叉树&a…

真实需求和梦想实现满足

多少的时光和岁月中都不曾认真系统的深度思考自己的真实需求和欲望之间是否一致&#xff0c;随着时间的流逝才发现自己追求的是一场空&#xff0c;自己的真实需求并不是苦苦追求的东西&#xff0c;这也是当梦想照进现实&#xff01;欲望是无善无恶的&#xff0c;不必为了满足自…

性能测试——LoadRunner: virtual user generator的使用

LoadRunner 在安装时取消勾选指定LoadRunner代理将要使用的证书&#xff0c;安装完成后会显示下面三个软件 Vitual User Generator&#xff1a;生成性能测试脚本Controller&#xff1a;创建测试场景&#xff0c;运行测试脚本&#xff0c;监控运行&#xff0c;收集到运行的数…

Spring——AOP是什么?如何使用?

一、什么是AOP&#xff1f;在不修改源代码的情况下 增加功能二、底层是什么&#xff1f;动态代理aop是IOC的一个扩展功能&#xff0c;现有IOC&#xff0c;再有AOP&#xff0c;只是在IOC的整个流程中新增的一个扩展点而已&#xff1a;BeanPostProcessorbean的创建过程中有一个步…

【JAVA】List接口

&#x1f3c6;今日学习目标&#xff1a;List接口 &#x1f603;创作者&#xff1a;颜颜yan_ ✨个人主页&#xff1a;颜颜yan_的个人主页 ⏰本期期数&#xff1a;第四期 &#x1f389;专栏系列&#xff1a;JAVA List接口一、ArrayList二、LinkedList总结一、ArrayList ArrayLis…

python完美实现一个自己的音乐服务器

最近发现&#xff0c;经常用的网易云音乐&#xff0c;有很多歌曲下架了&#xff0c;能听的越来越少了&#xff1b;歌单里的一些歌曲&#xff0c;现在要开通 VIP 才能听了。其实自己常听的歌曲不是很多&#xff0c;现在却有很多听不了了。怎么办呢&#xff0c;付费吗&#xff1f…

Python进阶-----面对对象5.0(面对对象三大特征之--多态)

目录 前言&#xff1a; 多态 习题 前言&#xff1a; 上一期讲了Python面对对象中的继承&#xff0c;而今天讲的是多态&#xff0c;其实多态跟继承是紧密相关的&#xff0c;换句话说多态是继承的一种表现形式&#xff0c;下面就一起来看看吧&#xff01;&#xff08;上一期链…

性价比高的骨传导蓝牙耳机,推荐几款性能高的骨传导耳机

​骨传导耳机&#xff0c;顾名思义是一种声音传递方式&#xff0c;利用头骨作为震动传导发声。不像一般耳机那样通过外耳或内耳传递声音。声音由耳部传播到头后产生振动刺激颅脑内听觉中枢引起听觉。因此是一种非入耳式的声音传播方式。而在选购过程中&#xff0c;对于价格、功…

自动驾驶目标检测项目实战(二)—基于Faster-RCNN的交通标志检测

自动驾驶目标检测项目实战——基于Faster-RCNN的交通标志检测 目前目标检测算法有很多&#xff0c;流行的就有faster-rnn和yolov&#xff0c;本文使用了faster-rnn框架进行训练&#xff0c;效果还不错&#xff0c;准确率&#xff0c;当然也可以使用更高版本的Yolov进行实战。本…

RK3568触摸屏驱动调试总结

硬件电路分析 RK3568 CPU通过I2C与触控板外设wdt87xx连接。 首先要根据电路图获取如下I2C的信息&#xff1a; 项目Value接在哪个I2Ci2c1I2C 寄存器地址0x2cHID 地址0x20中断B5 1、接在哪个I2C 如图,1接在I2C1&#xff1a; 2、使用哪个GPIO引脚接收触控板的中断 如图&#xf…

Ubantu从0开始配置深度学习RTX 4090+3090显卡的服务器

文章目录1. 基础2. 用户访问3. Pytorch环境的问题4. 显卡调度问题方法一&#xff1a;在shell命令前强制指定显卡方法二&#xff1a;在代码中强制指定显卡5. 各种各样的小BUG5.1 Liunx创建新用户登录异常&#xff1a;/usr/bin/xauth: error/timeout in locking authority file /…

Unity之向量计算

文章目录前言向量加法向量减法向量乘法/除法向量点乘&#xff08;内积&#xff09;向量叉乘&#xff08;外积&#xff09;向量归一化向量小结前言 讲讲Unity中的向量有关知识&#xff0c;一些概念在初高中就学过&#xff0c;就不解释了。向量只能与自己相同维度进行计算&#…

Zookeeper3.5.7版本——选举机制(第一次启动时)

目录一、第一次启动服务时Zookeeper的选举机制1.1、服务器1启动1.2、服务器2启动1.3、服务器3启动1.4、服务器4启动1.5、服务器5启动二、Zookeeper中的一些概念了解2.1、SID2.2、ZXID2.3、Epoch一、第一次启动服务时Zookeeper的选举机制 1.1、服务器1启动 服务器1启动&#x…