开发者问题收集

未捕获的 ReferenceError:初始化之前无法访问“Class”

2020-12-08
28069

我有一个小型 vanila-js 项目。Chrome 的控制台显示标题错误。我的代码结构如下:

<script type="module">

    import * as THREE from 'https://unpkg.com/three/build/three.module.js';

    import { TrackballControls } from 'https://unpkg.com/three/examples/jsm/controls/TrackballControls.js';

    var camera, scene, renderer, controls;

    init();
    animate();

function init() {
//code here
var list_of_objects=generate_first();}

 class Color{


        constructor() {
            this.R=getRandomInt(0,255);
            this.G=getRandomInt(0,255);
            this.B=getRandomInt(0,255);
            this.hex=this.fullColorHex(this.R,this.G,this.B);
        }
//rest of code}

 function generate_first() {
        var list_of_gens=[];
        var color=new Color();}

</script>

控制台显示行: var color=new Color(); 如何修复?我不知道为什么我会遇到这个问题。 PS:是的,我在堆栈上搜索过其他主题,但那些主题涉及框架或 typescript。没有一个能帮助我解决我的错误!这就是我创建该主题的原因。请不要留下缺点或差评,而是帮助我。

1个回答

类,如用 constlet 声明的变量,在初始化它们的行运行之前不能被引用。例如,以下内容是禁止的:

console.log(foo);
const foo = 'foo';

具有相同的规则。在这里,您在 class Color 行运行之前调用 init 。解决方法是:

const foo = 'foo';
console.log(foo);

或者,在这种情况下:

class Color {
  // ...
}
init(); // only call init once Color has been defined

Color 类移到顶部,或将 init() 调用移到脚本的底部,或者以其他方式确保在调用 init 时定义 Color

CertainPerformance
2020-12-08