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

本地运行ThreeJS+PhysiJS项目出现Class constructor cannot be invoked without 'new'报错

问题根因

你遇到的两个报错均为本地使用的Three.js版本远高于示例项目依赖的旧版本,旧版PhysiJS未适配新版Three.js API导致。

报错1:THREE.Quaternion: .inverse() has been renamed to invert() 修复方案

打开本地项目的physi.js文件,全局搜索所有调用.inverse()的代码行,全部替换为.invert(),即可消除该警告。

报错2:Uncaught TypeError: Class constructor Scene cannot be invoked without 'new' 修复方案

这个报错是因为新版Three.js中THREE.Scene已经重构为ES6 Class,旧版PhysiJS用ES5原型链继承、THREE.Scene.call(this)的调用方式不符合ES6 Class的初始化要求。
有两种可行修复方案:

  • 方案1(新手推荐,无需修改PhysiJS代码):将项目引用的Three.js版本降级到r123及更早版本,该版本区间内THREE.Scene仍为ES5构造函数,和旧版PhysiJS完全兼容。
  • 方案2(需修改PhysiJS代码,适配新版Three.js):把PhysiJS中Scene的ES5继承逻辑改为ES6 Class继承,找到physi.js中Scene定义的部分,修改为如下写法:
Physijs.Scene = class extends THREE.Scene {
  constructor() {
    super();
    // 此处保留原来PhysiJS Scene构造函数内的所有原有逻辑
  }
}

如果后续PhysiJS中其他继承Three.js内置类的模块也报同类错误,用相同的ES6 Class继承写法改造即可。

内容的提问来源于stack exchange,提问作者yabadaz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:54:04