javascript package的一种简单"优雅"实现

命名空间(namespace)是一种很常用的管理各种类的方式,javascript的目前版本还没有原生态地实现这个功能,只能去手动模拟一下,代码如下:

复制代码
    var $package=function(ns,clzName,clz){
        
var defineNamespace=function(root,ns){
            ns
=ns || "";
            ns
=ns.replace(/\s/g,"");
            
            
if (ns.length == 0) {
                
return root;
            }
else {
                
var nsc = ns.substr(01);
                
if (nsc != nsc.toLowerCase()) {
                    
throw new Error("命名空间首字母必须小写哦~");
                }
                
                
if (ns.indexOf("."== -1) {
                    
typeof(root[ns]) != "object" && (root[ns] = {});
                    
return root[ns];
                }
                
else {
                    
var _ns = ns.split(".")[0];
                    
typeof(root[_ns]) != "object" && (root[_ns] = {});
                    
return defineNamespace(root[_ns], ns.replace(/[^\.]*\./""));
                }
            }
        },
        
        c
=clzName.substr(0,1);
        
        
if(c!=c.toUpperCase()){
            
throw new Error("类名首字母必须大写哦~");
        }
        
        defineNamespace(window,ns)[clzName]
=clz;
    };
复制代码


现在就可以用package的方式申明了:

$package("common.app.test","Point",function(x,y){
    
this.x= x || 0;
    
this.y= y || 0;
});


这样就可以用namespace+classname的方式来实例化对象了:

    var p=new common.app.test.Point(1,2);
    alert(p.constructor
===common.app.test.Point);
    alert(p.x);
    alert(p.y);


不过目前还没有考虑好怎样才能优雅地解决import namespace的问题,要么在使用类的时候,直接用绝对路径,要么就用个中转的变量引用,如:

    var Point=common.app.test.Point;
    
var p=new Point(1,2);
    alert(p.constructor
===common.app.test.Point);
    alert(p.x);
    alert(p.y);


 

posted @   随机  阅读(2015)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
点击右上角即可分享
微信分享提示