我是靠谱客的博主 疯狂路灯,最近开发中收集的这篇文章主要介绍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( 0 1 );
                
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);


 

转载于:https://www.cnblogs.com/Random/archive/2010/08/29/1812048.html

最后

以上就是疯狂路灯为你收集整理的javascript package的一种简单"优雅"实现的全部内容,希望文章能够帮你解决javascript package的一种简单"优雅"实现所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部