2

最近开始学习Typescript。我对从 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;
})();

为什么会这样转换?

4

1 回答 1

6

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

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

于 2013-01-22T09:16:53.660 回答