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

时间:2013-01-22 07:24:09

标签: javascript typescript

最近开始学习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;
})();

为什么会这样转换?

1 个答案:

答案 0 :(得分:6)

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

当TypeScript发布并且Anders回答时,我问了同样的问题。你可以view the discussion on Codeplex