未捕获的 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个回答
类,如用
const
和
let
声明的变量,在初始化它们的行运行之前不能被引用。例如,以下内容是禁止的:
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