¿Cómo puedo eliminar o deshacer manualmente una envoltura en un prototipo de clase de Highcharts?
Actualmente tengo esto en una clase en Angular y parece que la envoltura se aferra a mi método como un cierre incluso después de que se destruye el componente.
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 { ... } }El método de ajuste sobrescribe una función original en el prototipo de Highcharts, por lo que es un cambio permanente. Puede comprobar cómo funciona exactamente el método aquí .
Como solución, puede almacenar una función original en algún lugar, por ejemplo:
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)); });Y restaurarlo cuando quieras.
const tooltipProto = H.Tooltip.prototype; // restore original refresh function tooltipProto.refresh = tooltipProto.refreshOriginal; delete tooltipProto.refreshOriginal;Demostración en vivo: http://jsfiddle.net/BlackLabel/nfqcwhk6/
Documentos: https://www.highcharts.com/docs/extending-highcharts/extending-highcharts