angular - Angular 服务可以引用它的发起者吗?
问题描述
考虑两个可注入服务:UsersService
和AdminUserService extends UserService
.
UserService
在它的构造函数中应用了一些初始化过程。
但由于AdminUserService
调用super()
,UserService
构造函数被调用两次。
请接受这种模式作为事实,因为我目前无法更改它。
我的问题是:的构造函数可以UserService
知道是谁调用了它并采取相应的行动吗?
解决方案
您可以在父构造函数中轻松访问对象的实例并检查其构造函数的名称,这将反映被实例化的类的名称。
class Parent {
constructor() {
console.log("I am", this.constructor.name);
}
}
class Child1 extends Parent {
constructor() {super();}
}
class Child2 extends Parent {
constructor() {super();}
}
var a = new Child1();
var b = new Child2();
虽然真正的问题是——你为什么需要这样做?我认为您需要在父类中访问该信息这一事实表明您需要重新考虑您的设计。也许将一些实例化逻辑移到父级之外?也许让父抽象,给它抽象方法,将在构造函数中调用,然后让孩子相应地实现该方法?见上面的片段:
abstract class Parent {
constructor() {
doSomethingInConstructor();
}
abstract doSomethingInConstructor(): void;
}
class Child1 extends Parent {
constructor() {
super();
}
doSomethingInConstructor(): void {
console.log("I do something as Child 1");
}
}
class Child2 extends Parent {
constructor() {
super();
}
doSomethingInConstructor(): void {
console.log("I do something else, since I'm a Child 1");
}
}
var a = new Child1();
var b = new Child2();
推荐阅读
- python - Pyro4:在远程子对象上调用方法而不尝试返回子对象
- javascript - 如果我使用两个“if”语句而不仅仅是一个“if/else”语句,为什么二进制搜索算法不起作用?
- textures - 如何正确可视化 A-Frame 中的 AO 地图贡献
- python - 在 C++ 中实现 python np.fromstring()
- google-sheets - 创建 ImportXML 以从任何内容创建者的视频页面获取最后 30 个视频的单个 YouTube 视频视图。可能的?
- rest - WebLogic 12c JAX-RS 和 JSON 编组
- promql - 如何编写 PromQL 单元测试来检查警报是否未触发?
- r - 在 R 中使用 cor.test 函数
- javafx - JavaFX - 如何使用窗口关闭/最小化按钮在后台运行桌面应用程序并从隐藏图标中“重新打开或完全关闭”
- javascript - Angular 6:键入时更改输入文本