为什么以这种方式转换代码

why the code is converted in this way?

本文关键字:转换 代码 方式 为什么      更新时间:2023-09-26

最近开始学习打字稿。我对从Typescript到Javascript的转换有疑问。

为什么使用此代码:

class Greeter {
    greeting: string;
    private hello(){
        return this.greeting;
    }
    public hi(){
        alert(this.hello());
    }
    constructor(message: string) {
        this.greeting = message;
    }
    greet() {
        return "Hello, " + this.greeting;
    }
}

转换为

var Greeter = (function () {
    function Greeter(message) {
        this.greeting = message;
    }
    Greeter.prototype.hello = function () {
        return this.greeting;
    };
    Greeter.prototype.hi = function () {
        alert(this.hello());
    };
    Greeter.prototype.greet = function () {
        return "Hello, " + this.greeting;
    };
    return Greeter;
})();

不是这个吗?

var Greeter = (function () {
    var hello = function(){
       return this.greeting;
    }
    function Greeter(message) {
        this.greeting = message;
    }
    Greeter.prototype.hi = function () {
        alert(hello.call(this));
    };
    Greeter.prototype.greet = function () {
        return "Hello, " + this.greeting;
    };
    return Greeter;
})();

为什么会这样转换?

私有变量和函数在运行时不设为私有的原因是性能下降。TypeScript 的创建是为了支持在浏览器和服务器上运行的大型程序 - 因此性能是一个大问题。

当TypeScript发布时,我问了同样的问题,Anders回答了。您可以查看有关 Codeplex 的讨论。