伪命名空间的使用.

 在javascript2.0广泛使用之前,这里说的"命名空间"都不是真正的. 只是在脚本内营造一个属于自己的小空间的小技巧而已.

 如果你的使用了Prototype库, 同时你又自己写了一个 function $(){} 函数 , 你的$函数就会与 Prototype库的$函数重名,所以我们要使用命名空间, 而且是伪命名空间.

 例如:

(function(){//代码})();

 //代码 处的代码,不能被外面访问,这就是自己的小空间了.

 开始写自己的库

 只有架子, 没写实现,以后会补全的,这里只是写一个写库的思想

(function(){   
       
    
//ADS命名空间 Advanced DOM Scripting   

    if(!window.ADS)   
    {   
        window.ADS
=
{};   
    }      
    
//确定浏览器是否与整个库兼容   

    //例子 alert(ADS.getEvent());   
    function isCompatible(other){}   
    window.ADS.isCompatible
=
isCompatible;   
    
//取得元素   

    //例子 ADS.$('bu1','bu2')   
    function $(){}   
    window.ADS.$
=
$;   
    
//添加事件   

    //例子 ADS.addEvent(window,'load',test6);   
    function addEvent(node,type_,listener){}   
    window.ADS.addEvent
=
addEvent;   
    
//删除事件   

    //例子 ADS.removeEvent(window,'load',test6);   
    function removeEvent(node,type,listener){}   
    window.ADS.removeEvent
=
removeEvent;   
       
    
function
 getElementsByClassName(className,tag,parent){}   
    window.ADS.getElementsByClassName
=
getElementsByClassName;   
       
    
function
 toggleDisplay(node,value){}   
    window.ADS.toggleDisplay
=
toggleDisplay;   
       
    
function
 removeChild(parent){}   
    window.ADS.removeChild
=
removeChild;   
       
    
function
 prependChild(parent,newChild){}   
    window.ADS.prependChild
=
prependChild;   
    
// 获得事件对象   

    function getEvent(){}   
    window.ADS.getEvent
=
getEvent;   
       
       
})();  

下面是写了实现的  库,  ADS.js

/**  
 * @author 赵磊 2009-04-25  
 
*/
  
(
function
(){   
       
    
//ADS命名空间 Advanced DOM Scripting   

    if(!window.ADS)   
    {   
        window.ADS
=
{};   
    }      
    
//确定浏览器是否与整个库兼容   

    //例子 alert(ADS.getEvent());   
    function isCompatible(other){   
        
if(other===false
  
        
||!
Array.prototype.push   
        
||!
Object.hasOwnProperty   
        
||!
document.createElement   
        
||!
document.getElementsByTagName   
        ){   
            
return false
;   
        }   
        
return true
;   
    }   
    window.ADS.isCompatible
=
isCompatible;   
    
//依据id取得元素   

    //例子 ADS.$('bu1','bu2')   
    function $(){   
        
var elements=new
 Array();   
           
        
//查找作为参数提供的所有元素   

        for(var i=0;i<arguments.length;i++)   
        {   
            
var element=
arguments[i];   
            
//如果该参数是一个字符串,假设它是一个id   

            if(typeof element=='string')   
            {   
                element
=
document.getElementById(element);   
            }   
            
//如果只提供了一个参数,则立即返回这个元素   

            if(arguments.length==1)   
            {   
                
return
 element;   
            }   
            
//否则将它添加进数组   

            elements.push(element);   
        }   
           
        
//返回包含多个被请求元素的数组   

        return elements;   
    }   
    window.ADS.$
=
$;   
    
//添加事件   

    //例子 ADS.addEvent(window,'load',test6);   
    //    ADS.addEvent(window,'load',test5);   
    //可以为一个对象添加多个事件   
    function addEvent(node,type_,listener){   
        
//检查兼容性   

        if(!isCompatible()){return false;}         
           
        
if(!(node=$(node))){return false
;}   
           
        
if
(node.addEventListener)   
        {   
            
//W3C的方法   

            node.addEventListener(type_,listener,false);   
            
return true
;   
        }
else if
(node.attachEvent)   
        {              
            
//MS IE的方法   

            node['e'+type_]=listener;   
            node[type_]
=function
()   
            {                  
                node[
'e'+
type_](window.event);   
            }              
            node.attachEvent(
'on'+
type_,node[type_]);              
            
return true
;   
        }   
        
//若两种方法都不具备   

        return false;   
    }   
    window.ADS.addEvent
=
addEvent;   
    
//删除事件   

    //例子 ADS.removeEvent(window,'load',test6);   
    function removeEvent(node,type,listener){   
        
if(!(node=$(node))) {return false
;}   
           
        
if
(node.removeEventListener)   
        {   
            
//W3C的方法   

            node.removeEventListener(type,listener,false);   
            
return true
;   
        }   
        
else if
(node.detachEvent)   
        {   
            
// MS IE 的方法   

            node.detachEvent('on'+type,node[type]);   
            node[type]
=null
;   
            
return true
;   
        }   
        
//若两种方法都不具备   

        return false;   
    }   
    window.ADS.removeEvent
=
removeEvent;   
    
//依据className 查找元素(集合)   

    //例子 ADS.getElementsByClassName("className","*",document);   
    //返回 数组   
    function getElementsByClassName(className,tag,parent){   
        parent
=parent||
documetn;   
        
if(!(parent=$(parent))){return false
;}   
           
        
//查找所有匹配的标签   

        var allTags=(tag=="*"&&parent.all)?parent.all:parent.getElementsByTagName(tag);   
        
var matchingElements=new
 Array();   
           
        
//创建一个正则表达示   

        className=className.replace(/\-/g,"\\-");   
        
var regex=new RegExp("(^|\\s)"+className+"(\\s|$)"
);   
           
        
var
 element;   
        
for(var i=0;i<allTags.length;i++
)   
        {   
            element
=
allTags[i];   
            
if
(regex.test(element.className)){   
                matchingElements.push(element);   
            }   
        }   
        
return
 matchingElements;   
    }   
    window.ADS.getElementsByClassName
=
getElementsByClassName;   
    
//反复隐显   

    //例子 ADS.toggleDisplay('id');   
    //    ADS.toggleDisplay('id','block');   
    function toggleDisplay(node,value){   
        
if(!(node=$(node))){return
 flase;}   
           
        
if(node.style.display!='none'
){   
            node.style.display
='none'
;   
        }
else
{   
            node.style.display
=value||''
;   
        }   
        
return true
;   
    }   
    window.ADS.toggleDisplay
=
toggleDisplay;   
    
//在指定元素后面插入一个元素   

    //ADS.insertAfter("bu1","bu8")   
    //ADS.insertAfter(ADS.$("bu1"),ADS.$("bu8"))       
    function insertAfter(node,referenceNode){   
        
if(!(node=$(node))){return false
;}   
        
if(!(referenceNode=$(referenceNode))){return false
;}   
        
return
 referenceNode.parentNode.insertBefore(node,referenceNode.nextSibling);   
    }   
    window.ADS.insertAfter
=
insertAfter;    
    
//删除指定元素的所有子元素   

    function removeChild(parent){   
        
if(!(parent=$(parent))) return false
;   
        
while
(parent.firstChild){   
            parent.firstChild.parentNode.removeChild(parent.firstChild);   
        }   
        
return
 parent;   
    }   
    window.ADS.removeChild
=
removeChild;   
    
//给指定节点添加子节点,  添加在已有子节点的前面   

    //   
    function prependChild(parent,newChild){   
        
if(!(parent=$(parent))) return false
;   
        
if(!(newChild=$(newChild))) return false
;   
        
if
(parent.firstChild)   
        {   
            
//如果存在一个 子节点,则在这个节点之前插入   

            parent.insertBefore(newChild,parent.firstChild)   
        }
else
{   
            
//如果没有子节点,则直接插入   

            parent.appendChild(newChild);   
        }   
        
return
 parent;   
    }   
    window.ADS.prependChild
=
prependChild;   
    
// 获得事件对象   

    function getEvent(){   
        
if
(window.event)   
                {    
                    
return
 window.event;   
                }   
                
var f=
getEvent.caller;   
                
while(f!=null
)   
                {   
                    
var e = f.arguments[0
];                        
                    
if(e && (e.constructor==MouseEvent||e.constructor==Event||e.constructor==KeyboardEvent)) return
 e;                           
                    f
=
f.caller;   
                }   
    }   
    window.ADS.getEvent
=
getEvent;   
       
       
})();  

转自:http://elf8848.javaeye.com/blog/374788
posted on 2009-07-26 23:28  钱途无梁  阅读(554)  评论(0编辑  收藏  举报