当前位置: 首页 > 面试题库 >

什么是“装饰器”?如何使用?

归俊杰
2023-03-14
问题内容

我很好奇AngularJS中的装饰器到底是什么。除了AngularJS文档中的简短内容和youtube视频中的简短提及(尽管很有趣)之外,装饰者在线上没有太多信息。

正如Angular所说的那样,装饰器是:

装饰服务,允许装饰者截取服务实例的创建。返回的实例可以是原始实例,也可以是委派给原始实例的新实例。

我真的不知道这 意味着
什么,而且我不确定为什么要将这种逻辑与服务本身分开。例如,如果我想在不同的条件下返回不同的值,则只需将不同的参数传递给相关函数,或使用共享该私有状态的另一个函数。

我仍然是AngularJS菜鸟,所以我敢肯定,这只是我的愚昧和/或坏习惯。


问题答案:

一个很好的用例$provide.decorator是,当您需要对模块所依赖的某些第三方/上游服务进行较小的“调整”时,保持服务不变(因为您不是该服务的所有者/维护者)。这是关于plunkr的演示。



 类似资料:
  • 我很好奇AngularJS中的装饰师到底是什么。除了AngularJS文档中的一个简介和youtube视频中的一个简短(尽管很有趣)提及之外,对于装饰师来说,网上没有太多信息。 正如棱角分明的人所说,装饰师是: 服务的装饰,允许装饰者拦截服务实例的创建。返回的实例可以是原始实例,也可以是委托给原始实例的新实例。 我真的不知道这意味着什么,我也不知道你为什么要把这个逻辑从服务本身中分离出来。例如,如

  • 问题内容: 基本上,我想知道为什么必须创建一个抽象装饰器类来实现(或扩展)某些接口(或抽象类)。为什么所有新的“装饰类”都不能简单地实现(或扩展)基本抽象对象本身(而不是扩展抽象装饰器类)? 为了更具体一点,我将使用设计模式书中涉及咖啡饮料的示例: 有一个称为的抽象组件类 简单的饮料类型,例如简单扩展 为了装饰饮料,创建了一个抽象类,该类扩展并具有 假设我们要添加“牛奶”调味品,将创建一个扩展 我

  • 在MobX 中使用 ES.next 装饰器是可选的。本章节将解释如何(避免)使用它们。 使用装饰器的优势: 样板文件最小化,声明式代码。 易于使用和阅读。大多数 MobX 用户都在使用。 使用装饰器的劣势: ES.next 2阶段特性。 需要设置和编译,目前只有 Babel/Typescript 编译器支持。 启用装饰器 如果想使用装饰器,请按照以下步骤操作。 TypeScript 启用 tsco

  • 问题内容: 考虑这个小例子: 哪个打印 为什么参数(应该是Test obj实例)没有作为第一个参数传递给装饰函数? 如果我手动进行操作,例如: 它按预期工作。但是,如果我必须事先知道某个函数是否装饰,它就破坏了装饰器的全部目的。这里的模式是什么,还是我误会了什么? 问题答案: tl; dr 您可以通过将类作为描述符并返回部分应用的函数来解决此问题,该函数从中应用对象作为参数之一,如下所示 实际问题

  • 问题内容: 假设我有一个名为的类,并且我想使用装饰器设计模式。如果我错了,请纠正我,但是要使其正常工作,我们需要创建一个装饰器类,例如,该类将保留对实例的引用,所有其他装饰器将对其进行扩展以添加功能。 我不明白为什么我们必须创建装饰器类而不是使用实例? 问题答案: 装饰器模式用于动态地(即在运行时)向对象添加功能。通常,在编写类时,对象将具有固定的功能。但是重要的一点是,对象的功能以对对象的客户端

  • 问题内容: 我正在用React学习Redux,偶然发现了这段代码。我不确定它是否特定于Redux,但我在其中一个示例中看到了以下代码片段。 虽然功能非常简单,但我不明白之前。如果我没有记错的话,它甚至都不是JavaScript运算符。 有人可以解释一下这是什么,为什么使用它? 更新: 实际上,它的一部分用于将React组件连接到Redux存储。 问题答案: 实际上,该符号是一个JavaScript