Javascript 为什么typescript super关键字生成无限循环?为什么super.method==this.method?
我试图从基类调用Javascript 为什么typescript super关键字生成无限循环?为什么super.method==this.method?,javascript,angular,typescript,Javascript,Angular,Typescript,我试图从基类调用ngOnInit ngOnInit() { super.ngOnInit(); } 如果我使用的是Chrome浏览器,一切都很好,但是如果我使用angular应用程序作为Microsoft Word的Office加载项,我会有无限的循环 在下方,Office附加模块使用IE或Edge浏览器渲染角度应用程序 我认为浏览器混淆了super和this,因此我们有递归,这就是无限循环的原因 一种解决方案是将基ngOnInit块代码放在另一个函数“myFunc”中,并从我可以使用
ngOnInit
ngOnInit() {
super.ngOnInit();
}
如果我使用的是Chrome浏览器,一切都很好,但是如果我使用angular应用程序作为Microsoft Word的Office加载项,我会有无限的循环
在下方,Office附加模块
使用IE
或Edge
浏览器渲染角度应用程序
我认为浏览器混淆了super
和this
,因此我们有递归,这就是无限循环的原因
一种解决方案是将基ngOnInit
块代码放在另一个函数“myFunc”中,并从我可以使用的派生类中提取
ngOnInit() {
super.myFunc();
}
我很好奇是否有其他解决方案。您可以尝试检查:
if(super.ngOnInit!==this.ngOnInit)
super.ngOnInit();
至少这样,如果它开始引用自身,那么就可以避免无限循环。让我们了解进展情况。您可以尝试检查:
if(super.ngOnInit!==this.ngOnInit)
super.ngOnInit();
至少这样,如果它开始引用自身,那么就可以避免无限循环。让我们知道它是如何运行的。我发现的另一种选择是使用
prototype
调用basengOnInit
ngOnInit(): Promise<void> {
this.ngOnInit == super.ngOnInit ? BaseComponent.prototype.ngOnInit.call(this) : super.ngOnInit();
}
ngOnInit():承诺{
this.ngOnInit==super.ngOnInit?BaseComponent.prototype.ngOnInit.call(this):super.ngOnInit();
}
我发现的另一种选择是使用prototype
调用basengOnInit
ngOnInit(): Promise<void> {
this.ngOnInit == super.ngOnInit ? BaseComponent.prototype.ngOnInit.call(this) : super.ngOnInit();
}
ngOnInit():承诺{
this.ngOnInit==super.ngOnInit?BaseComponent.prototype.ngOnInit.call(this):super.ngOnInit();
}
我不熟悉Office插件,但是没有办法调试/记录它吗?我在ngOnInit
中添加了一些日志,并将其写入一些API,我发现我收到了无限多的日志。对于类似的问题,我使用了不同的方法名称,但是这里的ngOnInit
是不能更改的。你说你认为它把super
和this
混淆了,难道你不能通过断言this.ngOnInit==super.ngOnInit
来确认它的基类ngOnInit函数是什么样子的吗?我不熟悉Office插件,但是没有办法调试/记录它吗?我在ngOnInit
中放了一些日志,并将其写入某个API,我发现我收到了无限多的日志。对于类似的问题,我使用了不同的方法名称,但这里的ngOnInit
无法更改。你说你认为它混淆了super
和this
,你不能通过断言this.ngOnInit==super.ngOnInit
基类ngOnInit函数是什么样子来确认吗?你知道super/this可以引用相同的东西的任何情况吗?是的,super.ngOnInit==this.ngOnInit
从OP共享的内容返回true
@Arcord;Office加载项似乎不符合标准规范。所以希望它对他们有效@SunnyRGupta,你的解决方案只是防止了无限循环。有没有办法在办公室内使用super.ngOnInit
插件?如果某个东西的编码方式不正确,我们必须使用变通方法。正如您所提到的,这和super指向的是相同的东西,不应该是。因此,避免它的唯一方法似乎是检查引用以避免无限循环。你知道super/this在什么情况下可以引用相同的东西吗?是的,super.ngOnInit==this.ngOnInit
从OP共享的内容返回true
@Arcord;Office加载项似乎不符合标准规范。所以希望它对他们有效@SunnyRGupta,你的解决方案只是防止了无限循环。有没有办法在办公室内使用super.ngOnInit
插件?如果某个东西的编码方式不正确,我们必须使用变通方法。正如您所提到的,这和super指向的是相同的东西,不应该是。因此,避免它的唯一方法似乎是检查引用以避免无限循环。