Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么typescript super关键字生成无限循环?为什么super.method==this.method?_Javascript_Angular_Typescript - Fatal编程技术网

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
调用base
ngOnInit

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
调用base
ngOnInit

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指向的是相同的东西,不应该是。因此,避免它的唯一方法似乎是检查引用以避免无限循环。