【问题标题】:Is TypeScript not using revealing module pattern for classes?TypeScript 是否没有对类使用显示模块模式?
【发布时间】:2013-03-22 18:10:01
【问题描述】:

TypeScript 是否没有对类使用显示模块模式?我预计这段代码会得到不同的结果。

class Test {

    private privateProperty: any;

    public publicProperty: any;     
}

生成这个:

var Test = (function () {
    function Test() { }
    return Test;
})();

我希望是这样的:

var test = (function(){
    var privateProperty;
    var publicProperty;

    return {
        publicProperty: publicProperty;
    };

})();

【问题讨论】:

  • 不,不是。 private/public 检查只是由编译器完成,不会影响生成的代码。 (但这只是一个猜测。:))不过,你的第二个例子是不对的。它甚至不返回一个函数。
  • module 的代码生成与您发布的最相似
  • @minitech:不,它不返回函数,它返回对象文字。它被称为显示模块模式。见这里:stackoverflow.com/questions/5647258/…
  • @epitka:哦。嗯,这是一个模块,而不是远程构造函数。
  • @minitech:“不是远程构造函数”是什么意思?

标签: typescript


【解决方案1】:

RMP 不适用于基于类的设计。 module 做你想做的事:

module myMod {
    var x = 31;
    export var y = x + 15;
}

生成:

var myMod;
(function (myMod) {
    var x = 31;
    myMod.y = x + 15;
})(myMod || (myMod = {}));

这里的显着特点:

  • 使用闭包捕获私人信息
  • 公共成员作为对象自己的属性可见
  • 对象是在 IIFE 中创建的

【讨论】:

  • 我认为 typescript 中的“类”与我认为的 c# 中的类相关,即私有和公共成员等,而模块更像是一个命名空间
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-11
  • 1970-01-01
  • 1970-01-01
  • 2012-09-24
  • 1970-01-01
相关资源
最近更新 更多