如何扩展 Google 映射 class?

How to extend the Google maps class?

我正在尝试创建一个自定义 Google 地图对象,该对象使用原型继承来代理任何它不具备的函数到 Google 地图对象。

到目前为止,这是我正在努力实现的一个极其简单的示例:

export default class MapProxy {
    constructor(element, options) {
        this.markers = {};
        google.maps.Map.apply(this, arguments)]
    }

    this.hasMarkers = () => {
        return (Object.keys(this.markers).length > 0);
    };
}

MapProxy.prototype = Object.create(google.maps.Map.prototype);

这工作正常,但我正在覆盖我的 MapProxy 的原型,因此我必须在我的构造函数中将我的函数定义为 this.myFunction。现在每个 Google 地图实例都创建了自己的自定义函数,而不是成为参考。

现在我可能不会得到 15 个 Google Map 实例,但是有没有更好的策略来继承 Google Maps 对象的原型函数而不覆盖我的 ProxyMap原型函数?

呃,既然你用的是 ES6 class 语法,为什么不把它也用于继承呢?

export default class MapProxy extends google.maps.Map {
//                            ^^^^^^^^^^^^^^^^^^^^^^^
    constructor(element, options) {
        super(...arguments);
        this.markers = {};
        // own method as an arrow function initialised in the constructor
        this.hasMarkers = () => Object.keys(this.markers).length > 0;
    }
    // prototype method
    hasMarkers() {
        return Object.keys(this.markers).length > 0;
    }
}