如何扩展 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;
}
}
我正在尝试创建一个自定义 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;
}
}