You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 16:48:25