【问题标题】:Make TypeScript produce prototypes for ES6让 TypeScript 为 ES6 生成原型
【发布时间】:2017-06-09 02:00:01
【问题描述】:

即使通用目标是 ES6,是否可以在最新的 TypeScript 中将特定的类方法制作为原型?

作为一个附带问题 - 让特定类只生成原型。

TypeScript 类示例:

class Test {
    constructor() {    
    }

    methodName() {   
    }
}

对于作为通用目标的 ES6,它生成相同的 JavaScript 代码,而我希望它是:

class Test {
    constructor() {
    }
}

Test.prototype.methodName = function () {
}

即尽管使用 ES6 作为通用目标,但对于特定方法或类中的所有方法,我都想获取原型。


询问的主要原因如下。我有一个需要创建大量此类实例的模块,在阅读了这里的许多帖子后,似乎一致认为原型在这种情况下会表现得更好:


附:我最感兴趣的是服务器端的东西,即 Node.js 4-8。

【问题讨论】:

  • 这个要求背后的故事是什么? PS:ES2015 类方法可通过prototype 获得。
  • 我不明白这个问题。你能提供一些样品吗?
  • “原型在这种情况下会表现得更好”——这没有任何意义:类是使用原型实现的。
  • @zerkms 原型方法与类方法。什么对你没有意义?
  • 那些链接什么都不是,与此无关。使用 ES6 类将生成适当的原型方法。您所指的链接是在构造函数中创建函数,而不是将它们放在原型中。当然 那些 相比之下性能会很差,每次创建新实例时都会创建这些函数。

标签: typescript


【解决方案1】:

当这段代码

class Test {
    constructor() {    
    }

    methodName() {   
    }
}

在支持 es6 的运行时中执行,methodName 在原型上定义的:

console.log(typeof Test.prototype.methodName)
VM153:1 function

更新

我创建了非常简单的测试来比较类中定义的方法与原型上分配的方法的性能。如果jsperf 结果可信,调用类方法在 Chrome 58 中慢 5%,但在 Firefox 中原型慢 14%。

我建议使用您的用例中的真实数据运行实际性能测试,然后为 Chrome 和/或 Firefox 提交适当的错误。

【讨论】:

  • "在 Chrome 58 中调用类方法慢 5%" --- 此处无法重现。
【解决方案2】:

没有办法做到这一点(来源:我在 TypeScript 团队工作)。

也许有一个后续问题可以说明您为什么要这样做。 AFAIK 这两种结果在行为上几乎无法区分。

【讨论】:

    猜你喜欢
    • 2015-02-18
    • 2015-01-19
    • 1970-01-01
    • 2017-06-12
    • 2021-12-19
    • 2021-08-15
    • 2023-03-11
    • 2011-06-22
    • 2021-11-27
    相关资源
    最近更新 更多