JavaScript中的模块

在学习TypeScript的模块之前我们先看看在JavaScript中的模块是如何实现的。

模块的好处

首先我们要了解使用模块的好处都有什么?

  1. 模块化、可重用;
  2. 封装变量与函数;

下面的示例为使用JavaScript实现的模块:

 var MyModule = function(name)
{
//这里定义的都是私有的成员
var myName = name;
var age = 25; //这里返回一个对象, 使用 JS 的闭包实现类的效果
return {
//这里都是公开的成员
show:function()
{
alert(myName + ":" + age);
}
};
} //创建一个实例
var obj = new MyModule("LiLei");
obj.show();

TypeScript中的模块

在TypeScript中,定义模块使用关键字module,通过模块我们可以更加有效的组织代码。比如当我们的项目越来越大时,我们把所有的类都暴露在全局命名空间下,难免会出现同名等冲突的情况,当我们使用模块后可以解决这个问题。

 module Validation
{
export interface StringValidator
{
isAcceptable(s: string): boolean;
} var lettersRegexp = /^[A-Za-z]+$/;
var numberRegexp = /^[0-9]+$/; export class LettersOnlyValidator implements StringValidator
{
isAcceptable(s: string)
{
return lettersRegexp.test(s);
}
} export class ZipCodeValidator implements StringValidator
{
isAcceptable(s: string)
{
return s.length === 5 && numberRegexp.test(s);
}
}
} function run()
{
// Some samples to try
var strings = ['Hello', '98052', '101'];
// Validators to use
var validators: { [s: string]: Validation.StringValidator; } = {};
validators['ZIP code'] = new Validation.ZipCodeValidator();
validators['Letters only'] = new Validation.LettersOnlyValidator();
// Show whether each string passed each validator
strings.forEach(s =>
{
for (var name in validators)
{
console.log('"' + s + '" ' + (validators[name].isAcceptable(s) ? ' matches ' : ' does not match ') + name);
}
});
} run();

使用模块要注意下面几点:

  1. 使用module包含的代码被存放到指定名称的命名空间中;
  2. 模块中需要外部访问的接口和类都需要添加关键字export;
  3. 外部要使用和访问模块中的类或接口必须将命名空间也写上;

我们看看对应的js文件:

 var Validation;
(function (Validation) {
var lettersRegexp = /^[A-Za-z]+$/;
var numberRegexp = /^[0-9]+$/;
var LettersOnlyValidator = (function () {
function LettersOnlyValidator() {
}
LettersOnlyValidator.prototype.isAcceptable = function (s) {
return lettersRegexp.test(s);
};
return LettersOnlyValidator;
})();
Validation.LettersOnlyValidator = LettersOnlyValidator;
var ZipCodeValidator = (function () {
function ZipCodeValidator() {
}
ZipCodeValidator.prototype.isAcceptable = function (s) {
return s.length === 5 && numberRegexp.test(s);
};
return ZipCodeValidator;
})();
Validation.ZipCodeValidator = ZipCodeValidator;
})(Validation || (Validation = {}));
function run() {
// Some samples to try
var strings = ['Hello', '98052', '101'];
// Validators to use
var validators = {};
validators['ZIP code'] = new Validation.ZipCodeValidator();
validators['Letters only'] = new Validation.LettersOnlyValidator();
// Show whether each string passed each validator
strings.forEach(function (s) {
for (var name in validators) {
console.log('"' + s + '" ' + (validators[name].isAcceptable(s) ? ' matches ' : ' does not match ') + name);
}
});
}
run();
//# sourceMappingURL=app.js.map

当然TypeScript的模块还有其它的用法,可以参考:http://www.typescriptlang.org/Handbook#modules

最新文章

  1. 2015 西雅图微软总部MVP峰会记录
  2. Canvas绘制时钟
  3. saltstack(master迁移)
  4. Hightcharts设置Y轴最大最小值
  5. OC之0801
  6. VS代码片段(snippet)创作工具——Snippet Editor(转)
  7. POJ3252——Round Number(组合数学)
  8. hdu 4711 动态规划
  9. JavaScript--对象+函数
  10. java部分基础总结
  11. DoTween学习笔记(一)
  12. linux下编译php追加enable的方法
  13. 正向代理vs.反向代理
  14. BestCoder Round #85 A B C
  15. 云游戏学习与实践(二)——安装GamingAnywhere
  16. hdu_1010_Tempter of the Bone_dfs
  17. Mysql系列九:使用zookeeper管理远程Mycat配置文件、Mycat监控、Mycat数据迁移(扩容)
  18. iOS: crush when save Core Data
  19. 从给定字符串中截取n个字节的字符(解决汉字截取乱码问题)
  20. WindowsPhone 8.1 语音命令资料

热门文章

  1. [swustoj 771] 奶牛农场
  2. ASP.NET在IE10,IE11中Form表单身份验证失效问题解决方法
  3. EF4.0和EF5.0增删改查的写法区别及执行Sql的方法
  4. FFMPEG + SDL音频播放分析
  5. [转](多实例)mysql-mmm集群
  6. 【LCS,LIS】最长公共子序列、单调递增最长子序列
  7. 【转】APUE习题4.6---测试lseek作用
  8. javascript一些有用但又不常用的特性
  9. Linux User's Manual IOSTAT
  10. 音频PCM格式