YUI 提供了类似于 Java 的 命名空间 机制。%BULID%/yahoo/yahoo.js 文件中,YAHOO 基类定义好了以后,第一个定义的方法就是 namespace(在 YUI 2.5 中,第 75 行)。下面是 YUI 手册上的介绍

namespace

static Object namespace ( arguments )
Returns the namespace specified and creates it 
if it doesn't exist

YAHOO.namespace("property.package");
YAHOO.namespace("YAHOO.property.package");

Either of the above would create YAHOO.property, then 
YAHOO.property.package Be careful when naming packages. 
Reserved words may work in some browsers and not others. 
For instance, the following will fail in Safari:

YAHOO.namespace("really.long.nested.namespace");

This fails because "long" is a future reserved word in 
ECMAScript

Parameters:
    arguments <String*> 1-n namespaces to create 

Returns: Object
    A reference to the last namespace object created

下面看下相应的代码。

YAHOO.namespace = function() {
    var a=arguments, o=null, i, j, d;

    // 根据参数的长度循环获取属性或方法名   
    for (i=0; i<a.length; i=i+1) {
        d=a[i].split(".");
        o=YAHOO;

        // 避免定义 YAHOO.YAHOO
        for (j=(d[0] == "YAHOO") ? 1 : 0; j<d.length; j=j+1) {
            // 加入相应的方法或属性
            o[d[j]]=o[d[j]] || {};
            o=o[d[j]];
        }
    }
    
    // 返回 YAHOO 本身
    return o;
};

根据文档,YUI 默认会添加 \"util\"、\"widget\"、\"example\" 三个命名空间,相应的代码如下。

(function() {
    // 添加默认的命名空间
    YAHOO.namespace("util", "widget", "example");

    if ("undefined" !== typeof YAHOO_config) {
        var l=YAHOO_config.listener,ls=YAHOO.env.listeners,unique=true,i;
        if (l) {
            // if YAHOO is loaded multiple times we need to check to see if
            // this is a new config object.  If it is, add the new component
            // load listener to the stack
            for (i=0;i<ls.length;i=i+1) {
                if (ls[i]==l) {
                    unique=false;
                    break;
                }
            }
            if (unique) {
                ls.push(l);
            }
        }
    }
})();

从 namespace 的函数写法可以得知,在 定义 Javascript 类的方法或者属性 也可以使用类似于数组的声明方式。比如

var o = {};
o.method = function () {
    alert("hello, world!");
}
o.method();

就可以写成

var o = {};
o["method"] = function () {
    alert("hello, world!");
}
o.method();

但请小心使用此种特性,毕竟数组操作与类的声明显性的区分,有利于以后的代码维护。

更新,感谢 小马 的指证:

「但请小心使用此种特性,毕竟数组操作与类的声明显性的区分」

    * {} 不是类,是对象
    * Javascript 里的对象就是关联数组
    * 什么时候使用 o.method() ,什么时候使用 o['method']() ,依据实际应用环境

建议结合 《JavaScript 权威指南》读 YUI,会让你读出更深刻的知识。