打字稿传递内联无效函数错误

Typescript Pass Inline Void Function Error

我有一个关于 TypeScript 和函数作为参数的问题。我遇到了 BabylonJS 的问题,但我认为,它是关于所有 TypeScript 的。我将渲染函数存储在 class:

this._renderloop = newScene.render; // render(): void; is a function of BabylonJS.Scene class

并通过

调用 BabylonJS renderLoop
this._webglEngine.runRenderLoop(this._renderloop);

这给我一些关于场景未初始化的属性(例如 _activeParticles)的错误。

但是当我通过以下方式设置渲染循环时:

this._renderloop = () => newScene.render();
this._webglEngine.runRenderLoop(this.renderloop);

一切正常。

第一次调用有什么问题?第二种会不会更高效,因为我跳过了一个函数调用?

(可在此处找到 BabylonJS 文档:https://doc.babylonjs.com/

this._webglEngine.runRenderLoop(newScene.render)

scene.render 中的 this 将是未定义的。修复它的最简单方法是将其包装在第二个示例中的函数中。

这是因为 javascript 处理 this 的方式。关于使用 this in the Typescript wiki.

有一个很好的指南