【问题标题】:Why does my TypeScript sometimes give me a instance and other times gives me a class?为什么我的 TypeScript 有时给我一个实例,而其他时候给我一个类?
【发布时间】:2017-03-08 16:15:46
【问题描述】:

我正在编写一个应用程序来学习 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!");
        }

我看到,有时差异是Vector2D,而不是Vector2D实例。显然,发生这种情况时,对其进行的任何操作都会导致Object doesn't support property or method ...

toVector2D的方法很简单:

toVector2D(): Vector2D {
    return new Vector2D(this.x, this.y);
}

我不知道这是否会有所不同,但这里有一些背景:

  • 该应用是在游戏循环中运行的游戏(每秒 60 帧 - 使用 window.requestAnimationFrame(() =&gt; this.animloop());

  • 应用在 Chrome 中运行良好

  • 它在 IE 中运行不正常(它看起来像一个不同的问题,但我还没有看到什么,因为 IE 和调试器工具在调查时崩溃)

  • 它使用最新的 TypeScript (2.2.1)

  • 好像是在开机后的一个随机时间点发生,有时是2秒,有时是3秒

  • 代码中还有其他地方发生这种情况,都与PointVector2D 相关,似乎与在每一帧中创建它们有关(如果我引入一个字段而不是每帧创建一个)

  • 我正在使用 AMD 和 requirejs

更新-------

使用 Edge 和调试工具并设置“始终从服务器刷新”,当从网站 (http://pacmanweb.azurewebsites.net/) 加载时,我可以看到游戏 尝试 运行 在加载所有模块之前。而在 Chrome 中,它似乎在运行游戏之前等待所有内容加载。

有什么想法吗?

【问题讨论】:

  • 这确实很奇怪,你有没有机会制作一个像 plnkr 这样的东西来显示这个问题。我们也可以玩的东西? :)
  • @toskv - 我已经包含了一个网站链接 - 希望你喜欢它(在你修复它之后:))

标签: javascript typescript html5-canvas microsoft-edge


【解决方案1】:

该应用程序对我来说失败了,因为您似乎使用的是按原样保留在转译代码中的默认参数值:

  reset(isDemoMode = false) {

Edge 似乎不支持此 ES6 功能,而 Chrome 很可能支持。

tsc 应该自动将其转换为 ES5。您应该检查您的配置,确保您没有将其设置为输出 es6 代码。

例如:

function obj(x = 5) {  
}

应该转译为:

function obj(x) {
    if (x === void 0) { x = 5; }
}

还有一个指向playground的链接。

【讨论】:

  • 你是明星!非常感谢。我现在只需要实现一个等待脚本、声音和字体加载的加载屏幕。再次感谢伙计。
  • 好吧..如果您有其他特定的问题,请提出另一个问题。 :)
猜你喜欢
  • 2016-01-31
  • 2011-10-31
  • 1970-01-01
  • 2020-07-31
  • 1970-01-01
  • 2012-01-25
  • 1970-01-01
  • 2022-01-09
  • 1970-01-01
相关资源
最近更新 更多