• 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);


  • 相关阅读:
    125-PHP类__set()魔术方法
    124-PHP类析构函数
    123-PHP类构造函数
    122-PHP类成员函数(三)
    121-PHP类成员函数(二)
    120-PHP调用成员方法并将不同类的对象做为参数
    119-PHP调用private成员的方法
    118-PHP调用带参数的成员方法
    117-PHP在外部无法调用private类成员函数
    HDU-2045 不容易系列之(3)—— LELE的RPG难题 找规律&递推
  • 原文地址:https://www.cnblogs.com/Random/p/1812048.html
Copyright © 2020-2023  润新知