Ste*_*unn 6 javascript html5-canvas typescript microsoft-edge
我正在编写一个应用程序来学习TypeScript.它在Chrome中运行良好,但在Edge中运行时遇到问题.我有这个方法:
set position(pos: Point) {
const diffAsPoint = pos.minus(this.canvasPos);
let diff: Vector2D = diffAsPoint.toVector2D(); // <--- this line
if (diff instanceof Vector2D) {
console.info("is a vector!");
} else {
console.info("not a vector!");
}
Run Code Online (Sandbox Code Playgroud)
我看到的是,有时,DIFF是一个Vector2D而不是作为一个实例一个Vector2D.显然,当发生这种情况时,对它的任何操作都会导致aObject doesn't support property or method ...
方法toVector2D很简单:
toVector2D(): Vector2D {
return new Vector2D(this.x, this.y);
}
Run Code Online (Sandbox Code Playgroud)
我不知道这是否有所作为,但这里有一些背景知识:
该应用程序是一个游戏循环运行的游戏(每秒60帧 - 使用window.requestAnimationFrame(() => this.animloop());)
该应用在Chrome中正常运行
它在IE中运行不正常(它看起来像一个不同的问题,但我还没有看到IE和调试工具在调查时崩溃)
它使用最新的TypeScript(2.2.1)
它似乎发生在启动后的一个随机点,有时是2秒,有时是3秒
在代码中还有其他地方发生这种情况,所有这些都与Point和Vector2D在每一帧中创建它们有关(如果我引入一个字段而不是每帧创建一个字段,一些问题就会消失)
我正在使用AMD和requirejs
更新-------
使用Edge和调试工具并设置"始终从服务器刷新",从网站(http://pacmanweb.azurewebsites.net/)加载时,我可以看到游戏尝试在加载所有模块之前运行.而在Chrome中,似乎在运行游戏之前等待加载所有内容.
有任何想法吗?
该应用程序对我来说失败了,因为看起来您正在使用转译代码中保留的默认参数值,如下所示:
reset(isDemoMode = false) {
Run Code Online (Sandbox Code Playgroud)
Edge 似乎不支持此 ES6 功能,而 Chrome 很可能支持。
tsc 应该自动将其转译为 ES5。您应该检查您的配置,确保您没有将其设置为输出 es6 代码。
例如:
reset(isDemoMode = false) {
Run Code Online (Sandbox Code Playgroud)
应该转译为:
function obj(x = 5) {
}
Run Code Online (Sandbox Code Playgroud)
以及到游乐场的链接。
| 归档时间: |
|
| 查看次数: |
92 次 |
| 最近记录: |