我有以下代码,其中我想替换animate中的所有主引用,以避免在主类中使用全局变量:
class Main {
constructor(idDiv) {
this.div = document.getElementById(idDiv);
this.sceneManager = new SceneManager(this.div);
}
animate() {
console.log('Main::animate::this', this);
console.log('Main::animate::main', main);
requestAnimationFrame(main.animate);
main.sceneManager.animate();
}
execute() {
new ManageEvents(this.div, this.sceneManager);
const atla = new Atla();
const repository = new Repository();
const loadData = new LoadData(atla, repository);
loadData.load(this.sceneManager);
console.log('Main::execute::this', this);
console.log('Main::execute::main', main);
this.animate(main.sceneManager);
}
}
const main = new Main('original');
main.execute();
目前,前面的代码创建了一个动画循环,使用THREEjs动画来渲染场景。
此外,目前的日志包括:
在执行中:
Main::execute::this Main {div: div#original.column, sceneManager: SceneManager}div: div#original.columnsceneManager: SceneManager {div: div#original.column, camera: PerspectiveCamera, scene: Scene, controls: T…E.TrackballControls, renderer: WebGLRenderer}__proto__: Object
Main::execute::main Main {div: div#original.column, sceneManager: SceneManager}
在动画中,首先调用:
Main::animate::this Main {div: div#original.column, sceneManager: SceneManager}
Main.js:16 Main::animate::main Main {div: div#original.column, sceneManager: SceneManager}
在动画中,其他人调用:
Main::animate::this null
Main.js:16 Main::animate::main Main {div: div#original.column, sceneManager: SceneManager}
正如我们在第一个调用中看到的,在execute和animate函数中,this和main都是相同的。然后在其他调用中,this in animate为null,main stills是main类的实例。我想这是因为这句话:
requestAnimationFrame(main.animate);
我们正在失去这一点。
此外,为了替换我尝试过的主要参考文献:
class Main {
constructor(idDiv) {
this.div = document.getElementById(idDiv);
this.sceneManager = new SceneManager(this.div);
}
animate(main) {
console.log('Main::animate::this', this);
console.log('Main::animate::main', main);
requestAnimationFrame(main.animate);
main.sceneManager.animate();
}
execute() {
new ManageEvents(this.div, this.sceneManager);
const atla = new Atla();
const repository = new Repository();
const loadData = new LoadData(atla, repository);
loadData.load(this.sceneManager);
console.log('Main::execute::this', this);
console.log('Main::execute::main', main);
this.animate(this);
}
}
const main = new Main('original');
main.execute();
若要更改传入的参数,以对引用this的当前Main实例进行动画处理。
其结果如下:
第一个电话:
Main::execute::this Main {div: div#original.column, sceneManager: SceneManager}
Main.js:34 Main::execute::main Main {div: div#original.column, sceneManager: SceneManager}
Main.js:15 Main::animate::this Main {div: div#original.column, sceneManager: SceneManager}
Main.js:16 Main::animate::main Main {div: div#original.column, sceneManager: SceneManager}
第二个电话:
Main::animate::this null
Main.js:16 Main::animate::main 697.568
Main.js:17 Uncaught TypeError: Failed to execute 'requestAnimationFrame' on 'Window': The callback provided as parameter 1 is not a function.
at animate (Main.js:17)
我明白这是因为:
requestAnimationFrame(main.animate);
我们不会再通过我们的主要道路,所以我做到了:
...
requestAnimationFrame(main.animate(main));
...
然而,它产生了一个无限的循环,我们再也看不到这个场景了。日志还包括:
Main::execute::this Main {div: div#original.column, sceneManager: SceneManager}
Main.js:34 Main::execute::main Main {div: div#original.column, sceneManager: SceneManager}
Main.js:15 Main::animate::this Main {div: div#original.column, sceneManager: SceneManager}
Main.js:16 Main::animate::main Main {div: div#original.column, sceneManager: SceneManager}
Main.js:15 Main::animate::this Main {div: div#original.column, sceneManager: SceneManager}
Main.js:16 Main::animate::main Main {div: div#original.column, sceneManager: SceneManager}
Main.js:15 Main::animate::this Main {div: div#original.column, sceneManager: SceneManager}
Main.js:16 Main::animate::main Main {div: div#original.column, sceneManager: SceneManager}
Main.js:15 Main::animate::this Main {div: div#original.column, sceneManager: SceneManager}
Main.js:16 Main::animate::main Main {div: div#original.column, sceneManager: SceneManager}
我也读过:
ES6类:通过对方法应用“addEventListener”访问“this”
如何调用。渲染和动画函数在对象类?
如何在动画循环中创建闭包(保护全局)?
我做错了什么?
你能帮我吗?
您可以绑定
动画功能,这样对此
的引用将始终引用您的对象,而不是请求动画帧
的默认窗口
上下文。
这里有一个简单的例子:
class Test {
constructor() {
this.name = "Window doesn't have this name!"
this.animate = this.animate.bind(this)
}
animate() {
requestAnimationFrame(this.animate)
console.log(this.name) // window's "name" property is usually empty or undefined
}
}
let test = new Test()
test.animate() // look at the console
我最近在我的机器上安装了nginx和php 7.0.16,但是由于某种原因,nginx下载了php文件,而不是执行它们。我已经花了几天时间在网上实施了所有可用的解决方案,但都是徒劳的。 我的nginx。配置文件是: conf.d文件夹中没有文件,启用的站点只有如下所示的默认文件 有人能告诉我,有什么问题吗?
所以基本上我有一个公共的静态空main方法,它创建一个框架和一个级别,级别是一个面板,然后添加到jframe中,但在代码之后似乎不会检查我在main中的time循环,我知道它没有,因为只要框架是可见的,我的time循环就应该被检查,如果它到达这一点而它没有,它应该在控制台窗口中打印一行。任何帮助都将不胜感激!同样是的,我知道打印行会弹出一个控制台窗口窗口,而不是实际上把它放在框架中,我为此而声明了
我用IntelliJ中的控制台模板创建了一个简单的Kotlin项目,并运行它,我在run-toolwindow中获得了gradle-symbol(参见图片)。 通常我在其他教程中看到有Kotlin符号,所以没有gradle被用来运行Kotlin-Project的主要部分。 是否有可能改变运行Kotlin-main的方式(尽管我查看了运行配置,但没有找到改变“运行环境”的方法) 这更接近,但现在它似
我正在研究一些对象的Flux,比如
问题内容: 我有以下代码可以SSH到节点并从其他设备中找到RSSI。 bot_ipv6是ssh到的ipv6地址的列表,脚本使用pexpect来ssh。 数据现在包含该设备的输出。 我想浏览数据并仅获取地址及其对应的RSSI。当命令可以在本地运行并输出到文件时,此代码有效: 匹配和匹配行是在其中定义的函数,在其他地方则在文件中查找以将字符与所要查找的字符进行匹配。 我的问题是我不知道如何将数据输出到
我正在一个水滴(数字海洋)中安装一个网站。我对正确安装带有PHP的NGINX有一个问题。我做了一个辅导https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-ubuntu-14-04但是当我试着跑的时候。php文件只是下载而已。。。例如<代码>http:/