首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我们在原型继承中使用临时框?

在原型继承中使用临时框的目的是为了解决原型链继承带来的问题。原型链继承是JavaScript中一种常见的继承方式,通过将父对象的实例作为子对象的原型来实现继承。然而,使用原型链继承存在以下问题:

  1. 共享属性:子对象的实例共享父对象原型上的属性,当一个实例修改了这些属性时,会影响到其他实例。
  2. 无法传递参数:父对象的构造函数无法接收参数,导致无法在创建子对象实例时传递参数。

为了解决这些问题,可以使用临时框来实现原型继承。临时框是一个空函数,通过将父对象的实例赋值给临时框的原型,然后将临时框的实例作为子对象的原型,从而实现继承。这样做的好处包括:

  1. 避免共享属性:每个子对象实例都有自己的原型,不会共享父对象原型上的属性,解决了共享属性的问题。
  2. 可传递参数:通过在临时框的构造函数中接收参数,并在创建子对象实例时传递参数,实现了参数的传递。

临时框的实现示例代码如下:

代码语言:javascript
复制
function Temp() {} // 临时框

Temp.prototype = parentObj.prototype; // 将父对象的实例赋值给临时框的原型

childObj.prototype = new Temp(); // 将临时框的实例作为子对象的原型

childObj.prototype.constructor = childObj; // 修复子对象原型的构造函数指向问题

使用临时框实现原型继承可以解决原型链继承的问题,使得子对象实例拥有独立的属性,并且可以传递参数。然而,需要注意的是,临时框的实现方式并不是完美的,可能会带来一些性能上的损失。因此,在实际开发中,可以根据具体情况选择合适的继承方式,如组合继承、原型式继承、寄生式继承等。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JavaScript的原型继承使用存在的安全问题

JavaScript的原型很多人都知道也很好用,但是很多人在使用原型继承中导致的安全问题却很少人知道,接下来我们就来好好了解一下。...真实开发我们经常会在代码中使用Property accessors 属性访问器,并且使用用户输入的参数去访问某个对象的属性。...这看起来可能是一个很稀疏平常的操作,但是往往在这个过程我们的代码就已经产生了一个很大的安全漏洞!!!为什么这样写代码会产生安全问题?...,我们我们原型上添加了一个polluted属性。...代码减少属性访问器的使用尽可能使用.的方式去访问对象的属性或者使用 Map或Set,来代替我们的对象检查对象的原型链,查看新创建对象的原型是否被恶意添加了原本不该有的属性,或者属性被修改检查用户的输入

18611

深入理解javascript继承机制(3)属性复制对象之间的继承深复制原型继承原型继承与属性复制的混合使用

属性复制 下面我们就实现这样一种继承方式,将父亲的原型对象的属性全部复制到子对象的原型属性 function extend2(Child, Parent) { var p = Parent.prototype...对象之间的继承 extend2我们都是以构造器创建对象为基础的,我们原型对象的属性一一拷贝给子原型对象,而这两个原型本质上也是对象。现在我们考虑不通过原型,直接在对象之间拷贝属性。...Paste_Image.png 原型继承 下面我们介绍一种ES5被采纳的继承方式,称作原型继承,Object.create(object)可以调用他。...原型继承与属性复制的混合使用 我们知道实现继承就是将已有的功能归为所有,我们new一个新对象的时候,应该继承于现有对象,然后再为其添加额外的属性与方法。...原型继承可以新建一个对象的时候,将已有对象设置为新的对象的原型。 属性拷贝,就是新建一个对象之后,将另一个已有对象的属性拷贝过来。 我们将这两项功能放在一个函数

1.4K20
  • Java为什么使用继承而不是多继承

    继承虽然能使子类同时拥有多个父类的特征,但是其缺点也是很显著的,主要有两方面: (1)如果在一个子类继承的多个父类拥有相同名字的实例变量,子类引用该变量时将产生歧义,无法判断应该使用哪个父类的变量...(2)如果在一个子类继承的多个父类拥有相同方法,子类中有没有覆盖该方法,那么调用该方法时将产生歧义,无法判断应该调用哪个父类的方法。...正因为有以上的致命缺点,所以java禁止一个类继承多个父类; 接口中不能有实例变量,只能有静态的常量,不能有具体的方法(包含方法体),只能有抽象方法,因此也就摒弃了多继承的缺点。...,即使存在一定的冲突也会在编译时提示出错; 而引用静态变量一般直接使用类名或接口名,从而避免产生歧义,因此也不存在多继承的第一个缺点。...总结: java为什么要单继承,多实现,总结如下: 若为多继承,那么当多个父类中有重复的属性或者方法时,子类的调用结果会含糊不清,因此用了单继承为什么是多实现呢?

    1.6K10

    我们为什么MySQL几乎不使用分区表

    Oracle使用分区表是一种很自然的事情,数据库容量基本都是500G起,大小5T以上都是很常见的。...但是MySQL的使用我们几乎不使用分区表,今天有同学群里一起沟通,我就按照我的理解做了梳理。...我觉得主要是使用模式的差异,我们使用的主要原因是避免单库存储过大,而且分区表变更相对会比较麻烦,MySQL侧,我们的目标是让数据库更小巧轻量一些,可能更偏TP一些,我们目前是排除了分区表的设计,而且也明确写进了开发规范...,如果按照数据类型来说,状态表,流水表和配置表,这三种类型也就只有流水日志表的数据都是建议使用周期表的形式进行存储,方便随时扩展,表结构变更也方便T+1的变更模式 在这个基础上,可以把这个问题转化为,...这个问题我们调研过,目前来看,查询复杂度的一些变更业务基本都能够接受,而且风险覆盖度要小一些(程序侧也不能完全保证SQL一定好使不走全表扫描)目前我们实现周期表(日表,月表,周表,年表,季表)的日表和月表的自动扩展

    1.6K50

    设计原则为什么反复强调组合要优于继承

    同样地,《阿里巴巴Java开发手册》中有一条规定:谨慎使用继承的方式进行扩展,优先使用组合的方式实现。为什么不推荐使用继承  每个人在刚刚学习面向对象编程时都会觉得:继承可以实现类的复用。...所有更细分的鸟,比如麻雀、鸽子、乌鸦等,都继承这个抽象类。我们知道,大部分鸟都会飞,那我们可不可以 AbstractBird抽象类,定义一个fly()方法呢?  答案是否定的。...Java8的接口默认方法Java8我们可以接口中写默认实现方法。...处境尴尬的继承  大家对继承的厌恶主要是因为长期以来程序员过度使用继承继承并非一无是处。  在某些特殊场景下,我们必须使用继承。...其实我们很难真正使用继承,根本原因在于,自然界,代际之间是存在变异的,物种之间也是,而且这种变化是无法做规律化描述的,既伴随着某些功能的增加,也伴随着某些功能的弱化,甚至还有某些功能的改变。

    85020

    设计原则为什么反复强调组合要优于继承

    面向对象编程,有一条非常经典的设计原则,那就是:组合优于继承,多用组合少用继承。同样地,《阿里巴巴Java开发手册》中有一条规定:谨慎使用继承的方式进行扩展,优先使用组合的方式实现。 ?...为什么不推荐使用继承   每个人在刚刚学习面向对象编程时都会觉得:继承可以实现类的复用。所以,很多开发人员需要复用一些代码的时候会很自然的使用类的继承的方式,因为书上就是这么写的。...我们知道,大部分鸟都会飞,那我们可不可以 AbstractBird抽象类,定义一个fly()方法呢?   答案是否定的。尽管大部分鸟都会飞,但也有特例,比如鸵鸟就不会飞。...Java8的接口默认方法 Java8我们可以接口中写默认实现方法。...其实我们很难真正使用继承,根本原因在于,自然界,代际之间是存在变异的,物种之间也是,而且这种变化是无法做规律化描述的,既伴随着某些功能的增加,也伴随着某些功能的弱化,甚至还有某些功能的改变。

    2.3K10

    为什么我们RDO中使用OpenStack包构建的测试

    您可能会问:“但是为什么在打包时要重新执行这些测试呢?”毕竟,这些相同的测试是合并之前由Zuul gate执行的。原因有很多: 这些单元测试是特定的操作系统版本和特定的包集上运行的。...它们可能与RDO使用的不同,所以我们需要确保项目与那些组件的兼容性。 项目依赖项使用pip安装在OpenStack gate,有些版本可能会有所不同。...它们还允许我们问题发生在上游通道之前进行检测。OpenStack项目使用requirements项目来决定其他项目应该使用他们自己的库的哪个版本。...RDO的情况下,我们在所有项目中使用来自主分支的代码运行RDO trunk builder,这允许我们提前通知,就像在这个示例bug中一样。...我们已经看到过单元测试失败的案例,比如在有限的环境运行,或者需要超过一定时间才能完成。 既然您已经了解了RDO打包的单元测试的重要性,那么您可以继续并确保我们每个包上都使用它。

    69800

    为什么我们规模化实时数据中使用Apache Kafka

    一个数字威胁不断演变的世界,拥有准确的实时数据进行安全扫描至关重要。最新的数据是 SecurityScorecard 的生命线。...Horus 使用实时流管道和连接器来处理数据。该团队编写了基于 Python 的应用程序,并将其作为代理部署到此系统。...Confluent SecurityScorecard 扫描网络并爬取网页内容的能力中发挥着至关重要的作用,从追踪违规事件的数据库抽出数十亿条记录。这使得任何团队都可以“重播”数据。...扩展过程,这些任务消耗了宝贵的时间,而这些时间本来可以用来开发业务应用程序。 MSK 无法满足 SecurityScorecard 的运营需求,而且像进行版本升级等操作极其困难且需要手动完成。...未来,威胁研究和数据平台团队一直使用流数据管道来增强所有团队的数据发现和共享能力。

    10710

    我们为什么推荐Json中使用string表示Number属性值

    在这篇简短的文章,我将解释使用JSON传输数据时,为什么浮点数或大十进制值应表示为字符串 。...long类型引发的诡异情况 长话短说,同事利用swagger对接后端API时,诡异的发现swaggerUI显示的json属性值并不是api返回的值。...123123126964992223, Profile = "Please attention on Id", }; return new JsonResult(testJson); } 该APIswagger...直接给结论:部分long类型值(最大值2^63^-1)会超过Javascript的最大安全Number(2^53^-1), 浏览器/前端 使用JSON.parse(123123126964992223)...将JSON的数字值作为字符串传输的是为了消除传输的精度丢失或歧义性。 JSON规范未给数值指定精度,JSON解析器会自由选择合适的数值精度。

    1K10

    什么代码要求我们使用LocalDateTime而不是Date?

    作者:何甜甜在吗 来源:http://1t.click/a7Gm 项目开发过程中经常遇到时间处理,但是你真的用对了吗,理解阿里巴巴开发手册禁用static修饰SimpleDateFormat...通过阅读本篇文章你将了解到: 为什么需要LocalDate、LocalTime、LocalDateTime【java8新提供的类】; java8新的时间API的使用方式,包括创建、格式化、解析、计算、...# 为什么需要LocalDate、LocalTime、LocalDateTime 1.Date如果不格式化,打印出的日期可读性差 Tue Sep 10 09:34:04 CST 2019 2.使用SimpleDateFormat...多并发情况下使用SimpleDateFormat需格外注意 SimpleDateFormat除了format是线程不安全以外,parse方法也是线程不安全的。...calb属性设置cal c、返回设置好的cal对象 但是这三步不是原子操作 多线程并发如何保证线程安全 - 避免线程之间共享一个SimpleDateFormat对象,每个线程使用时都创建一次SimpleDateFormat

    1.1K20

    【Rust日报】 2019-06-26: DigitalBridge: 为什么我们云渲染中使用Rust?

    分支正在切换到std::future #tokio Read More Reddit 讨论 parallel:Rust实现的类GNU Parallel的工具 GNU Parallel,它是一个shell工具,可以一台或多台计算机上并行的执行计算任务...Read More DigitalBridge:为什么我们云渲染中使用Rust? #render DigitalBridge公司利用光线追踪技术做家居环境的云渲染技术。他们为什么使用Rust呢?...使用C++会严重阻止许多具有高级语言经验的团队成员为代码库做出贡献。它还导致偶尔难以调试的内存安全性和正确性问题,即使是我们经验丰富的C++开发人员也会感到困惑。所以,他们选择了Rust。...他们的全部服务,包括所有C、C++和Python组件都使用Rust重写了,从任务加载到调度GPU操作都使用Rust(一个全栈Rust案例)。使用Rust为他们带来诸多好处: 改进了开发流程。...现在他们的产品,每天可以处理1000多个渲染定制服务。 Read More Rust 类型语言 #type 本文简要地介绍了Rust的类型系统。

    62550

    什么是线程组,为什么 Java 不推荐使用

    在线程组,如果发生未捕获异常,可以通过 Thread.UncaughtExceptionHandler 进行处理。 Java ,虽然线程组是一种功能强大的机制,但实际上并不推荐使用。...下面主要从以下几个方面说明: 1、难以扩展 平常的开发,当我们需要对线程进行动态调度时,线程组往往过于笨重,这导致了代码难以扩展。...3、容易引起歧义 Java ,虽然 ThreadGroup 的设计旨在通过将一组线程分到同一个容器来轻松管理和控制它们,但如果使用错误,可能会导致线程状态。...因此, Java ,线程组已基本过时,推荐使用 Executor 框架等新的更实用的工具来进行线程管理。... JDK8之后,API也推出了更加强大的CompletionService接口,它能够执行更为复杂的异步任务并得到结果,这极大地扩展了Java多线程编程的功能性。

    29020

    应用大模型的场景我们该如何使用语义搜索?

    然而,由于大语言模型存在的过时、不准确、幻觉、一本正经的胡说八道、基于互联网数据训练这些缺点,因此,直接使用大语言模型生成的内容商业场景,特别是涉及到一些专业领域以及私有数据的场景,是无法提供准确或有价值的信息的...我们为什么要在使用大模型时使用语义搜索? 首席,我们需要思考,为什么我们使用大模型时要使用语义搜索,知道初心是什么,然后才能坚守初心,而不至于被次要的东西所影响,最后导致项目变形。...如果自己使用机器学习平台进行部署,则需要注意资源消耗的问题,Elasticsearch,模型是在线程之间共享的。...实际应用我们往往需要结合向量搜索和其他搜索技术,甚至是结合机器学习与NLP推理技术来构建一个高效且灵活的搜索系统。这样可以充分利用各种技术的优势,同时避免各种技术的局限性。...选择一个健壮、完善、被广泛验证过的平台,将是我们有效使用语义搜索,有效的与大模型相集合的良好开端,帮助我们起跑线。

    3.6K122

    【DB笔试面试565】Oracle为什么索引没有被使用?

    ♣ 题目部分 Oracle为什么索引没有被使用? ♣ 答案部分 “为什么索引没有被使用”是一个涉及面较广的问题。有多种原因会导致索引不能被使用。...还有很多其它原因会导致不能使用索引,这个问题在MOS(MOS即My Oracle Support)“文档1549181.1为何在查询索引未被使用”中有非常详细的解释,作者已经将相关内容发布到BLOG(...n 索引是否应该被使用? 二、索引本身的问题 n 索引的索引列是否WHERE条件(Predicate List)? n 索引列是否用在连接谓词(Join Predicates)?...n 总体成本,表扫描的成本是否占大部分? n 访问空索引并不意味着比访问有值的索引高效? n 参数设置是否正确? 四、其它问题 n 是否存在远程表(Remote Table)?...n 索引列是否使用了前置通配符(%)? n 索引列是否使用了非等值连接符? n 是否WHERE子句中对索引列进行了IS NULL值判断? n 是否查询转换失败导致不能选择索引?

    1.2K20

    从0到1学习反射,为什么会出现反射技术,我们项目中如何使用

    目录 反射小知识 反射需要学的类: 出现这个技术的背景 原理: tomcat 软件就使用了反射技术 字节码文件 如何获取字节码文件(如何创建class对象) class 类 class 类常用的方法...所以利用反射创建多个对象,其实这些对象是同一个 反射需要学的类: -- java.lang 包里面的Class 类 --java.lang.reflect包...在对外提供接口的同时,还对外提供了一个配置文件,应用程序是一直在读这个配置文件, 现在我们需要做的就是,自己写一个实现这个接口的类,并且将这个类的名称告诉这个配置文件就可以了。...这个应用程序里面就有一个专门提取配置文件的流,读完就会得到这个类名,并且寻找对应的class文件,就是字节码文件,找到了这个应用程序就会加载这个文件,并且获取这个文件里面的所有的内容,获取到之后就可以调用里面的所有东西 所以也就是我们写应用程序的时候...也就是所有的类都继承了object,所以所有的类都有这个方法 第三个方式,这个是必须掌握的 java.lang 包中有一个类Class 里面有一个静态方法forName() ,就可以根据这个方法得到字节码文件

    37910

    Java 为什么不推荐 while 循环中使用 sleep()

    前言最近逛 CSDN 看到一篇文章,文章大意是说为什么循环中不推荐使用 sleep 操作,原因在于线程挂起和唤醒会有很大的性能消耗,并推荐使用 Timer 及 ScheduledExecutorService...Java 线程实际对应着操作系统的一个线程,对线程的挂起和唤醒是一个很耗性能的操作,因此我们需要避免对线程进行挂起和唤醒;但还一个重要的原因是忙等待,如上文所示 FLAG 变量的状态可能永远不会被改变...方案是否合理记住一点,讨论方案永远不能脱离场景,没有一种方案可以适应所有的场景,我们永远只是探讨适合当前场景的方案。...比如微服务体系,客户端上报实例状态,或者服务端检测客户端状态都会使用定时轮询的机制。... Java AQS 等待获取锁和线程池任务为空等待新任务时,会使用等待和唤醒操作轮询机制 和 等待和唤醒 一般会结合使用,避免线程频繁的挂起和唤醒。

    1K30

    三个理由告诉你,为什么TF必须使用MPLSoUDP

    在理解为什么选择MPLSoUDP之前,让我们先来看看何时需要使用MPLSoGRE。...除了这种情况以外,建议都使用MPLSoUDP! 为了理解为什么MPLSoUDP更好,我们需要回顾一下如何构建MPLSoUDP数据包。 首先将原始raw数据包添加一个mpls标签。...让我们看一个有关SN GW的示例: 我们看到,有2个ecmp数据包流向计算节点。使用MPLSoUDP将使我们能够以更平衡的方式两个路径之间分配数据包。...进行轮询操作之前,物理网卡首先在线路上接收到数据包,然后将该数据包“发送”到一个队列。为此,物理NIC在数据包上执行哈希操作。 到这里,事情应该很清楚了。...为什么转发核心之间尽可能平衡地分配流量很重要? 每个转发核心最多可以处理X个PPS(每秒数据包)。PPS间接意味着吞吐量。通常来说,PPS越高,吞吐量越高。 让我们举个例子。

    82220
    领券