OpenLayers升级v7.0.0报错:class构造函数需用new调用,求修正方案
解决OpenLayers 7.x中"class constructors must be invoked with 'new'"错误
OpenLayers 7.x版本开始,核心类(比如ol.control.Control)全部改为ES6 Class实现,不再支持通过Function.call()这种传统构造函数继承的方式调用父类构造函数,这就是你遇到这个错误的原因。
你需要把自定义控件的代码改成ES6类继承的写法,具体修改如下:
window.app = {}; var app = window.app; // 改用ES6 class继承ol.control.Control class PanelCoordAndCopyright extends ol.control.Control { constructor(opt_options) { const options = opt_options || {}; const element = document.createElement('div'); element.className = 'panel_coordandcopyright ol-control'; element.innerHTML = 'Hello world'; // 用super()调用父类构造函数,替代原来的ol.control.Control.call() super({ element: element, target: options.target }); } } app.PanelCoordAndCopyright = PanelCoordAndCopyright;
关键修改点:
- 用
class ... extends ol.control.Control声明自定义控件类,明确继承关系 - 在构造函数中用
super()调用父类的构造函数,传递配置参数,替代原来的ol.control.Control.call(this, ...) - 保持原来的实例化方式不变(比如
new app.PanelCoordAndCopyright(options))
这样修改后,就能符合OpenLayers 7.x的类规范,解决构造函数调用的错误。
内容的提问来源于stack exchange,提问作者Evgeni Tch
相关产品推荐
相关产品推荐

