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

javascript类方法应该决定是否执行它们,还是应该由被调用者决定是否调用?

在JavaScript中,类方法应由被调用者决定是否调用。这是因为JavaScript是一门动态、灵活的语言,允许在运行时根据需求决定是否调用类方法。

JavaScript中的类方法是定义在类上的函数,它们可以通过类的实例来调用。类方法可以执行特定的操作、处理数据,或者返回特定的结果。在设计类方法时,通常应该遵循被调用者决定是否调用的原则,以提高代码的灵活性和可重用性。

通过让被调用者决定是否调用类方法,可以将决策权交给调用者。这意味着调用者可以根据需要决定是否执行该方法,可以根据特定条件来确定是否调用该方法。这种灵活性可以使代码更容易适应不同的场景和需求。

在实际开发中,这种设计可以帮助开发者编写更加通用的类方法,而不是针对特定场景进行硬编码。被调用者可以根据自身需求决定是否调用该方法,这样可以使代码更加可维护、可扩展。

对于是否执行类方法的决策,可以基于条件判断、事件触发、用户交互等。通过将执行决策交给被调用者,可以使代码更加灵活,更容易适应不同的使用场景。

腾讯云相关产品和产品介绍链接地址:

  1. 云函数(https://cloud.tencent.com/product/scf):腾讯云函数是一种无服务器的事件驱动计算服务,可以在云端运行您的代码。
  2. 云服务器(https://cloud.tencent.com/product/cvm):腾讯云服务器是可扩展的云计算服务,提供虚拟机实例以及多种配置选项。
  3. 云数据库 MySQL 版(https://cloud.tencent.com/product/cdb_mysql):腾讯云数据库 MySQL 版是一种高性能、可扩展的云数据库服务。
  4. 云存储(https://cloud.tencent.com/product/cos):腾讯云存储是一种可扩展的云存储服务,用于存储和处理数据。
  5. 人工智能(https://cloud.tencent.com/product/ai):腾讯云人工智能平台提供多种人工智能服务和工具,包括图像识别、语音识别、自然语言处理等。
  6. 物联网(https://cloud.tencent.com/product/iotexplorer):腾讯云物联网平台是一种全面、安全的物联网解决方案,用于连接、管理和控制物联网设备。
  7. 云原生应用(https://cloud.tencent.com/product/tke):腾讯云原生应用平台提供全面的云原生应用开发、部署和管理工具。
  8. 区块链服务(https://cloud.tencent.com/product/baas):腾讯云区块链服务是一种快速构建和部署区块链应用的解决方案。
  9. 元宇宙(https://cloud.tencent.com/product/tic):腾讯云元宇宙是一种构建虚拟世界、数字孪生和模拟环境的云服务。 请注意,以上仅为腾讯云相关产品的示例,供参考。具体的选择和推荐应根据实际需求和情况进行评估。
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

GO语言实战之类型的本质

调用使用值接收者声明的方法时,会使用这个值的一个副本来执行,即用于消费这个接收者,不会对原有接收有影响。...需要说明的是GOlang对方法调用者很宽松,既允许使用值,也允许使用指针来调用方法,不必严格符合接收者的类型。...这个函数传入了一个 int8型的值,并返回一个bool 类型的值,这里的参数没有使用指针来共享参数的值,调用者传入了一个uint8值的副本,接受一个返回值 true 或者 false。...至于是使用返回的值替换原来的 Time 值,还是创建一个新的 Time 变量来保存结果,是由调用者决定的事情。 非原始的情况 大多数情况下,结构类型的本质并不是原始的,而是非原始的。...因为 File 类型的值具备非原始的本质,所以总是应该被共享,而不是被复制。 「是使用值接收者还是指针接收者,不应该由方法是否修改了接收到的值来决定。这个决策应该基于该类型的本质。」

40530

一个写几千行?该改改啦!

,还会让你的难以扩展,甚至会让其他程序猿认为你不专业 发散式变化(指引发此类修改的地方很多),如果一个的职责很多,那它的扇入(调用者)一定很多,每个调用者的修改都有可能让你这个不得不随之修改,也就是发散式变化...就是说不管哪儿出了问题,你这个都得遭殃 发散式修改(指此类修改引发修改的地方很多),相同的,如果一个职责很多,那支撑它实现的下级,即扇出(调用方)一定很多,如果此类逻辑发生变动,所有下级调用者可能都得随之修改...扫把() × Tom.用扫把扫地() × 重构——转移成员变量+函数(转移职责) 将不应该由自己管理的成员变量和函数转移出去 那就要考虑两个问题:该转移谁?...来看一个图 图中成员【偏A】【A】调用两次,而只它所在的【过长调用1次,因而应该转移给【A】去管理 由于函数【偏A】与成员【偏A】的亲密度较高(只调用了【偏A】),因而应与【偏A】共进退,...,不如直接把他们删除掉 为新起个名,选个包吧 注意,抽取的函数和成员一定要符合一个原则,那就是抽取函数使用抽取成员的次数一定高于剩余函数的次数,不然违反亲密性原则(成员归于调用它最多的,没有理由你用的比我多还让我来管理

45940
  • 求求你别再写上千行的了,试试 IDEA 这些牛逼的重构技巧吧

    过长等代码问题,还会让你的难以扩展,甚至会让其他程序猿认为你不专业 2、发散式变化(指引发此类修改的地方很多),如果一个的职责很多,那它的扇入(调用者)一定很多,每个调用者的修改都有可能让你这个不得不随之修改...,所有下级调用者可能都得随之修改,也就是发散式修改 就是说你这个出了问题,不管哪儿都会遭殃 4、难以扩展,如果你的一个接口非常多,那它的子类怎么办?...比如: Tom.扫地() √ Tom.扫地With扫把() × Tom.用扫把扫地() × 重构——转移成员变量+函数(转移职责) 将不应该由自己管理的成员变量和函数转移出去 那就要考虑两个问题:该转移谁...来看一个图 图片 图中成员【偏A】【A】调用两次,而只它所在的【过长调用1次,因而应该转移给【A】去管理 由于函数【偏A】与成员【偏A】的亲密度较高(只调用了【偏A】),因而应与【偏A】共进退...,同去留,转移给【A】 成员【偏B】和函数【偏B】也是相同道理 职责1(函数【1】和成员【偏职责1】)和职责2(函数【2】和成员【偏职责2】)由于找不到可转移的合适的,所以抽取出一个新的 注意,先决定移动哪个成员变量

    78510

    答应我,别再写上千行的了好吗

    ),如果一个的职责很多,那它的扇入(调用者)一定很多,每个调用者的修改都有可能让你这个不得不随之修改,也就是发散式变化 就是说不管哪儿出了问题,你这个都得遭殃 发散式修改(指此类修改引发修改的地方很多...),相同的,如果一个职责很多,那支撑它实现的下级,即扇出(调用方)一定很多,如果此类逻辑发生变动,所有下级调用者可能都得随之修改,也就是发散式修改 就是说你这个出了问题,不管哪儿都会遭殃 难以扩展...图中成员【偏A】【A】调用两次,而只它所在的【过长调用1次,因而应该转移给【A】去管理 由于函数【偏A】与成员【偏A】的亲密度较高(只调用了【偏A】),因而应与【偏A】共进退,同去留,转移给...【A】 成员【偏B】和函数【偏B】也是相同道理 职责1(函数【1】和成员【偏职责1】)和职责2(函数【2】和成员【偏职责2】)由于找不到可转移的合适的,所以抽取出一个新的 注意,先决定移动哪个成员变量...注意,抽取的函数和成员一定要符合一个原则,那就是抽取函数使用抽取成员的次数一定高于剩余函数的次数,不然违反亲密性原则(成员归于调用它最多的,没有理由你用的比我多还让我来管理) 一些小问题 由于抽取的函数直接使用了未抽取的对象而导致重构失败

    46030

    900行又臭又长的重构,几分钟搞定

    ,还会让你的难以扩展,甚至会让其他程序猿认为你不专业 发散式变化(指引发此类修改的地方很多),如果一个的职责很多,那它的扇入(调用者)一定很多,每个调用者的修改都有可能让你这个不得不随之修改,也就是发散式变化...就是说不管哪儿出了问题,你这个都得遭殃 发散式修改(指此类修改引发修改的地方很多),相同的,如果一个职责很多,那支撑它实现的下级,即扇出(调用方)一定很多,如果此类逻辑发生变动,所有下级调用者可能都得随之修改...扫把() × Tom.用扫把扫地()      × 重构——转移成员变量+函数(转移职责) 将不应该由自己管理的成员变量和函数转移出去 那就要考虑两个问题:该转移谁?...来看一个图 图中成员【偏A】【A】调用两次,而只它所在的【过长调用1次,因而应该转移给【A】去管理 由于函数【偏A】与成员【偏A】的亲密度较高(只调用了【偏A】),因而应与【偏A】共进退,...,那就是无用对象了,不如直接把他们删除掉 2.为新起个名,选个包吧 3.注意,抽取的函数和成员一定要符合一个原则,那就是抽取函数使用抽取成员的次数一定高于剩余函数的次数,不然违反亲密性原则(成员归于调用它最多的

    21230

    「设计模式 JavaScript 描述」模板方法模式

    既然父规定了子类的方法执行这些方法的顺序,子类就应该拥有这些方法,并且提供正确的实现。 3.2 抽象方法和具体方法 抽象方法声明在抽象中,抽象方法并没有具体的实现过程,是一些“哑”方法。...钩子方法的返回结果决定了模板方法后面部分的执行步骤,也就是程序接下来的走向,这样一来,程序就拥有了变化的可能。...在这一原则的指导下,我们允许底层组件将自己挂钩到高层组件中,而高层组件会决定什么时候、以何种方式去使用这些底层组件,高层组件对待底层组件的方式,跟演艺公司对待新人演员一样,都是“别调用我们,我们会调用你...模板方法模式是好莱坞原则的一个典型使用场景,它与好莱坞原则的联系非常明显,当我们用模板方法模式编写一个程序时,就意味着子类放弃了对自己的控制权,而是改为父通知子类,哪些方法应该在什么时候调用。...这也相当于好莱 坞原则中提到的“别调用我们,我们会调用你”。 回调函数 在 ajax 异步请求中,由于不知道请求返回的具体时间,而通过轮询去判断是否返回数据,这显然是不理智的行为。

    27910

    Spring高手之路21——深入剖析Spring AOP代理对象的创建

    决定是否创建代理:如果 Bean 不在上述类别中,进一步检查是否存在自定义的 TargetSource(一个控制如何获取或创建代理对象的组件)。如果存在,表示这个 Bean 需要被增强或代理。4....判断基础设施或跳过代理:检查 bean 是否为基础设施跳过代理,若是则返回 null。...调用开始:调用者调用postProcessBeforeInstantiation方法,开始代理对象的创建过程。这个方法主要负责在bean实例化之前判断并创建其代理。2....客户端调用Bean的方法:客户端通过代理实例调用Bean的方法。如果Bean代理,Advisors中定义的额外逻辑(例如,拦截、事务管理)会在调用实际Bean方法之前或之后执行。10....目的:Advisors包含了增强的定义,这些增强定义了如何拦截方法调用及在调用前后执行特定的操作。7.

    16410

    线程池的使用

    ■ **CallerRunsPolicy:**只要线程池未关闭,该策略直接在调用者线程中运行当前丢弃的任务。显然这样不会真的丢弃任务,但是,调用者线程性能可能急剧下降。...■ execute() 方法用于提交不需要返回值的任务,所以无法判断任务是否线程池执行成功。通过代码可知 execute() 方法输入的任务是一个 Runnable 的实例。...它们的原理是遍历线程池中的工作线程,然后逐个调用线程的 interrupt 方法来中断线程,所以无法响应中断的任务可能永远无法终止。...至于应该调用哪一种方法来关闭线程池,应该由提交到线程池的任务来决定,通常调用shutdown 方法来关闭线程池,如果任务不一定要执行完,就可以调用 shutdownNow 方法。...至于应该调用哪一种方法来关闭线程池,应该由提交到线程池的任务来决定,通常调用shutdown 方法来关闭线程池,如果任务不一定要执行完,就可以调用 shutdownNow 方法

    56530

    求你们了,别再写上千行代码的好吗?

    ,还会让你的难以扩展,甚至会让其他程序猿认为你不专业 2、发散式变化(指引发此类修改的地方很多),如果一个的职责很多,那它的扇入(调用者)一定很多,每个调用者的修改都有可能让你这个不得不随之修改,...,所有下级调用者可能都得随之修改,也就是发散式修改,就是说你这个出了问题,不管哪儿都会遭殃 4、难以扩展:如果你的一个接口非常多,那它的子类怎么办?...) 将不应该由自己管理的成员变量和函数转移出去 那就要考虑两个问题:该转移谁?...来看一个图 1、图中成员【偏A】【A】调用两次,而只它所在的【过长调用1次,因而应该转移给【A】去管理 2、由于函数【偏A】与成员【偏A】的亲密度较高(只调用了【偏A】),因而应与【偏A...,那就是无用对象了,不如直接把他们删除掉 2)为新起个名,选个包吧 3)注意,抽取的函数和成员一定要符合一个原则,那就是抽取函数使用抽取成员的次数一定高于剩余函数的次数,不然违反亲密性原则(成员归于调用它最多的

    1.2K30

    Java 异常处理的 9 个最佳实践

    2、优先明确异常 你抛出的异常越明确越好,永远记住,你的同事或者几个月之后的你,将会调用你的方法并且处理异常。 因此需要保证提供给他们尽可能多的信息。这样你的 API 更容易理解。...你的方法调用者能够更好的处理异常并且避免额外的检查。...3、记录指定的异常 每当你在方法签名中指定异常,你也应该在 Javadoc 中记录它。 这与上一个最佳实践具有相同的目标:尽可能多地向调用者提供信息,以便避免或处理异常。...但这一次,你不会将信息提供给方法调用者。每个必须了解在日志文件或监视工具中报告异常情况时发生了什么情况的人都可以读取异常消息。 因此,应该尽可能精确地描述问题,并提供最相关的信息来了解异常事件。...或者是抛出异常的代码改变,现在抛出同一个的多个异常,而调用的代码并不能阻止所有异常。 你至少应该写一条日志信息,告诉大家这个不可思议的事发生了,而且有人需要检查它。 ?

    80690

    《Head First 设计模式》学习心得笔记

    工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的是哪一个(决定的意思是指:在编写创造者时,不需要知道实际创建的产品是哪一个)。...),应该派生自一个抽象(接口或者抽象); 不要覆盖基中已经实现的方法(基中已经实现的方法应该由所有子类共享); 抽象工厂模式:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体。...调用者 (Invoker)只要调用 execute() 方法就可以发出请求,然后由 具体命令对象 (ConcreteCommand) 调用接收者 (Receiver) 的一个或多个动作; 接收者 (Receiver...对于最少知识原则,对任何对象而言,在该对象的方法内,我们应该调用属于以下范围内的方法: 该对象本身; 当作输入参数而传递进来的对象; 该方法所创建或实例化的任何对象(即局部变量); 该对象的任何组件...当子类必须提供算法中的某个方法或步骤的实现时,使用抽象方法;如果算法的这个部分是可选的,就用钩子(钩子即为在抽象中,什么事情都不做的一个具体方法,可以让子类有能力对算法的不同点进行挂钩,且由子类自行决定是否需要挂钩

    50730

    关于如何实现一个TCC分布式事务框架的一点思考

    重试时会再次调用各TCC服务的Confirm/Cancel业务方法。如果某个服务的Confirm/Cancel业务之前已经生效(其参与的RM本地事务已经提交),重试时就不应该再次调用。...否则,其Confirm/Cancel业务方法多次调用,就会有“服务幂等性”的问题。 2.2....因此,这类业务方法上的异常情况并不能反映他们是否生效。不接管Spring的TransactionManager,就无法了解事务于何时创建,也无法了解它于何时提交/回滚。...而一个事务应该被commit还是rollback,则应该是由Spring容器来决定的:Spring决定提交事务时,会调用TransactionManager来完成commit操作;Spring决定回滚事务时...既然Confirm/Cancel业务可能会被多次调用,就需要保障其幂等性。 那么,应该由TCC事务框架来提供幂等性保障?还是应该由业务系统自行来保障幂等性呢?

    1.1K10

    Effective Java要点笔记

    equels方法诀窍: == 判断是否是同一个对象的引用 instanceof 进行类型检查 把参数转换为正确的类型 检查参数的每个域是否一一对的equals 覆盖equals必须覆盖hashCode...当非静态成员的实例创建的是时候,它和外围实例之间的关联关系也随之建立起来&不能修改 每当编写方法和构造器的时候,应该考虑他它的参数有哪些限制,应该把限制写到文档中,并在方法的开头处加上限制逻辑,私有方法...要注意是否允许调用者修改其内部的组件, 关于方法签名的设计: 方法名称尽量要风格一致,并选择大众认可的名称 方法设计太多,会使难以学习,使用,文档化,测试以及维护 避免过长的参数列表,目标参数个数...(Throwable.getCause)来获取底层的异常 不过我们应该在底层方法调用的时候尽量确保它们执行成功,从而避免它们抛出异常,比如通过严格的检查高层传递到底层的参数。...次选方案是,让高层悄悄的绕开异常, 将高层方法调用者与底层问题隔离起来。(底层catch异常打错误日志) 一般而言,失败的方法调用应该使对象保持在被调用之前的状态 异常要打印关键信息,禁止忽略异常

    44110

    如何实现一个TCC分布式事务框架的一点思考

    掌握每个RM本地事务的状态以及它们与Try/Confirm/Cancel业务方法之间的对应关系,以此为基础,TCC事务框架才能有效的构建TCC全局事务。...比如,传播事务上下文的业务方法,在它开始执行时,容器并不会为其创建新的事务,而是它的调用方参与的事务,使得二者操作在同一个事务中;同样,在它执行完毕时,容器也不会提交/回滚它参与的事务的。...因此,这类业务方法上的异常情况并不能反映他们是否生效。不接管Spring的TransactionManager,就无法了解事务于何时创建,也无法了解它于何时提交/回滚。...而一个事务应该commit、还是rollback,则应该是由Spring容器来决定的:Spring决定提交事务时,会调用TransactionManager来完成commit操作;Spring决定回滚事务时...既然Confirm/Cancel业务可能会被多次调用,就需要保障其幂等性。 那么,应该由TCC事务框架来提供幂等性保障?还是应该由业务系统自行来保障幂等性呢?

    1.1K20

    java异常处理(学习笔记)

    使用throws声明抛出异常 使用throws抛出异常的思路是:当前方法不知道如何处理这种类型的异常,该异常应该由上一级调用者处理,如果main方法也不知道如何处理这种类型的异常,也可以使用throws...如果某段代码中调用了一个带throws声明的方法,该方法抛出了Checked异常,则表明该方法希望它的调用者来处理该异常。...也就是说,在异常出现的当前方法中,程序只对异常进行部分处理,还有些处理需要在该方法调用者中才能完成,所以应该再次抛出异常,让该方法调用者也能捕获到异常。...,首先传给该方法调用者,该方法调用者再次传给其调用者,直至最后传到main方法,如果main方法依然没有处理该异常,JVM会中止该程序,并打印异常的跟踪栈信息。...第一行的信息详细显示了异常的类型和异常的详细信息,接下来跟踪栈记录程序中所有的异常发生点,各行显示调用方法执行的停止位置,并标明中的方法名、与故障点对应的文件的行。

    64411

    NodeJS错误处理最佳实践

    应该检查更加具体的约束么?例如参数是否非空,是否大于零,是不是看起来像个IP地址,等等等。 我该如何处理那些不符合预期的参数?我是应该抛出一个异常,还是把错误传递给一个callback。...我怎么才能提供足够的信息让调用者知晓错误细节。 我该怎么处理未预料的出错?我是应该用 try/catch ,domains 还是其它什么方式呢?...通常,只有顶层的调用者知道正确的应对是什么,是重试操作,报告给用户还是其它。但是那并不意味着,你应该把所有的错误全都丢给顶层的回调函数。...此外,你还要记录: 调用者可能会遇到的操作失败(以及它们的name) 怎么处理操作失败(例如是抛出,传给回调函数,还是 EventEmitter 发出) 返回值 使用 Error 对象或它的子类,并且实现...在写新函数的时候,用文档清楚地记录函数预期的参数,包括它们的类型、是否有其它约束(例如必须是有效的IP地址),可能会发生的合理的操作失败(例如无法解析主机名,连接服务器失败,所有的服务器端错误),错误是怎么传递给调用者

    1.5K41

    Effective-java-读书笔记之异常

    exception).运行时异常(run-time exception).错误(error).决定使用受检异常或是非受检异常时, 主要的原则: 如果期望调用者能够适当地恢复, 对于这种情况就应该使用受检的异常...大多数运行时异常都表示前提违例, 例如数组越界访问.如果无法决定到底应该用受检(checked exception)还是非受检异常(runtime exception), (无法确定是否可能恢复), 就用...(有时候可以通过检查高层传入底层的参数实现.)如果底层异常的确不可避免, 让高层默默解决这些异常, 从而使高级别方法调用者与低层问题隔离...., 然后只要把它们放到消息描述中, 就可以自动产生细节信息.第76条 努力使失败保持原子性失败原子性(failure atomic): 失败的方法调用应该使对象保持在被调用之前的状态.实现这种效果的途径...:设计一个不可变的对象.在执行操作之前检查参数的有效性, 在对象的状态修改之前抛出适当的异常. -> 让可能会失败的计算部分都在对象状态修改之前发生.在对象的一份临时拷贝上执行操作, 当操作完成后再用临时拷贝中的结果代替对象的内容

    53161

    避免Java应用程序中NullPointerException的技巧和最佳实践

    如果调用者为空,则此调用的一个副作用就是可能导致NullPointerException。...集合提供方便的空的List, Set 和Map方法:Collections.EMPTY_LIST ,Collections.EMPTY_SET 和Collections.EMPTY_MAP ,可以相应地使用它们...通过查看 @NotNull 和@Nullable ,程序员自己可以决定是否检查null。顺便说一句,对于Java程序员来说,这是相对较新的最佳实践,要花些时间才能利用起来。...一个相同的注释,通过定义什么可以为空和什么不能为空,调用者可以做出明智的决定。选择fast-fail还是接受null也是您需要采取并坚持一致的重要设计方法。...如果某个方法返回一个对象,该对象将在调用方上执行,例如Collection.iterator()方法返回Iterator,则调用方将在该迭代器上执行遍历。

    1.1K50

    Java 异常处理的 9 个最佳实践

    你的方法调用者能够更好的处理异常并且避免额外的检查。...3、记录指定的异常 每当你在方法签名中指定异常,你也应该在 Javadoc 中记录它。 这与上一个最佳实践具有相同的目标:尽可能多地向调用者提供信息,以便避免或处理异常。...但这一次,你不会将信息提供给方法调用者。每个必须了解在日志文件或监视工具中报告异常情况时发生了什么情况的人都可以读取异常消息。...或者是抛出异常的代码改变,现在抛出同一个的多个异常,而调用的代码并不能阻止所有异常。 你至少应该写一条日志信息,告诉大家这个不可思议的事发生了,而且有人需要检查它。 ?...否则,在方法签名中指定它,并让调用者处理它。 9、封装好的异常而不使用 有时候,最好是捕获一个标准异常并将其封装成一定制的异常。一个典型的例子是应用程序或框架特定的业务异常。

    76920

    进阶 | 全方位解读this

    在一个函数上下文中,this由调用者提供,由调用函数的方式来决定。如果调用者函数,某一个对象所拥有,那么该函数在调用时,内部的this指向该对象。...从结论中我们可以看出,想要准确确定this指向,找到函数的调用者以及区分他是否是独立调用就变得十分关键。...再来看一些容易理解错误的例子,加深一下对调用者是否独立运行的理解。 foo.getA()中,getA是调用者,他不是独立调用对象foo所拥有,因此它的this指向了foo。...三、使用call,apply显示指定this JavaScript内部提供了一种机制,让我们可以自行手动设置this的指向。它们就是call与apply。所有的函数都具有着两个方法。...我们常常会用到这方法,但是我们也要借助上面讲到过的知识,来判断this是否在传递中被修改了,如果没有修改,就没有必要这样使用了。 另外就是借助闭包与apply方法,封装一个bind方法

    34310
    领券