命名空间

命名空间:namespace:模块化

为什么要使用命名空间

  1. class userName{
  2. constructor(){
  3. console.log('我是userName');
  4. }
  5. }
  6. class userPwd{
  7. constructor(){
  8. console.log('我是userInfo');
  9. }
  10. }
  11. class userInfo{
  12. constructor(){
  13. new userName()
  14. new userPwd()
  15. }
  16. }
  17. new userInfo()

如上ts代码所示,编译成js代码如下,userName、userPwd、userInfo编译成js文件后都是全局变量,全局变量容易出现命名冲突,污染全局等缺点,因此namespace命名空间就是解决这一问题的

  1. "use strict";
  2. class userName {
  3. constructor() {
  4. console.log('我是userName');
  5. }
  6. }
  7. class userPwd {
  8. constructor() {
  9. console.log('我是userInfo');
  10. }
  11. }
  12. class userInfo {
  13. constructor() {
  14. new userName();
  15. new userPwd();
  16. }
  17. }
  18. new userInfo();

语法格式

namespace 名称{
export 在改作用域外边的方法|属性
namespace 名称{
变量名称也可以套
}
}

  1. namespace user {
  2. export class userName{
  3. constructor(){
  4. console.log('我是userName');
  5. }
  6. }
  7. export class userPwd{
  8. constructor(){
  9. console.log('我是userInfo');
  10. }
  11. }
  12. }
  13. class userInfo{
  14. constructor(){
  15. new user.userName()
  16. new user.userPwd()
  17. }
  18. }
  19. new userInfo()
  1. "use strict";
  2. var user;
  3. (function (user) {
  4. class userName {
  5. constructor() {
  6. console.log('我是userName');
  7. }
  8. }
  9. user.userName = userName;
  10. class userPwd {
  11. constructor() {
  12. console.log('我是userInfo');
  13. }
  14. }
  15. user.userPwd = userPwd;
  16. })(user || (user = {}));
  17. class userInfo {
  18. constructor() {
  19. new user.userName();
  20. new user.userPwd();
  21. }
  22. }
  23. new userInfo();

如上js代码,namespace命名空间的作用相当于把类userName、userPwd定义在了立即执行函数作用域内,给变量了一个作用域,避免全局污染和重复命名。

export

///