首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Highcharts.wrap中删除扩展的Wrap方法

从Highcharts.wrap中删除扩展的Wrap方法
EN

Stack Overflow用户
提问于 2021-11-20 02:56:06
回答 1查看 56关注 0票数 1

如何手动删除/撤消Highcharts类原型上的包装?

我目前在Angular中的一个类中有这个,即使在组件被销毁之后,包装似乎仍然将我的方法作为一个闭包。

代码语言:javascript
复制
import * as Highcharts from 'highcharts';
export class ExampleComponent implements OnDestroy
     constructor() {
         function logRefresh(H) {
             H.wrap(H.Tooltip.prototype, 'refresh', function(proceed, point) {
                 proceed.apply(this, Array.prototype.slice.call(arguments, 1));
                 console.log(proceed, point);
             });
         }
         logRefresh(Highcharts);
     }

    ngOnDestroy(): void {
        ...
    }
}
EN

回答 1

Stack Overflow用户

发布于 2021-11-22 13:46:07

wrap方法覆盖了Highcharts prototype中的原始函数,因此它是一个永久性的更改。你可以在here上检查这个方法是如何工作的。

作为解决方案,您可以将原始函数存储在某个位置,例如:

代码语言:javascript
复制
H.wrap(H.Tooltip.prototype, 'refresh', function(proceed) {
  console.log('refresh');

  if (!H.Tooltip.prototype.refreshOriginal) {
    H.Tooltip.prototype.refreshOriginal = proceed;
  }

  proceed.apply(this, Array.prototype.slice.call(arguments, 1));
});

并在你需要的时候恢复它。

代码语言:javascript
复制
const tooltipProto = H.Tooltip.prototype;
// restore original refresh function
tooltipProto.refresh = tooltipProto.refreshOriginal;
delete tooltipProto.refreshOriginal;

现场演示: http://jsfiddle.net/BlackLabel/nfqcwhk6/

文档: https://www.highcharts.com/docs/extending-highcharts/extending-highcharts

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70042901

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档