yzx99

导航

 

今天,我导入MicrosoftAjax.debug.js后,发现在JScript的编辑器中,Sys居然是命名空间的形式体现!而我以前使用这种方法:
var ZU = {};
体现的是一个属性,用另一种方法:
ZU = function () {};
体现的是一个方法,从来没有体现出命名空间的。

查看它的代码,先是这一句:
Type.registerNamespace('Sys');
表示注册了一个命名空间,然后再找其对应的函数:
Type.registerNamespace = function Type$registerNamespace(namespacePath)
{
  /// <param name="namespacePath" type="String"></param>
  var e = Function._validateParams(arguments, [
        { name: "namespacePath", type: String }
    ]);
  if (e) throw e;

  if (!Type.__fullyQualifiedIdentifierRegExp.test(namespacePath)) throw Error.argument('namespacePath', Sys.Res.invalidNameSpace);
  var rootObject = window;
  var namespaceParts = namespacePath.split('.');

  for (var i = 0; i < namespaceParts.length; i++)
  {
    var currentPart = namespaceParts[i];
    var ns = rootObject[currentPart];
    if (ns && !ns.__namespace)
    {
      throw Error.invalidOperation(String.format(Sys.Res.namespaceContainsObject, namespaceParts.splice(0, i + 1).join('.')));
    }
    if (!ns)
    {
      ns = rootObject[currentPart] = {};
      if (i === 0)
      {
        window.__rootNamespaces[window.__rootNamespaces.length] = ns;
      }
      ns.__namespace = true;
      ns.__typeName = namespaceParts.slice(0, i + 1).join('.');
      var parsedName;
      try
      {
        parsedName = eval(ns.__typeName);
      }
      catch (e)
      {
        parsedName = null;
      }
      if (parsedName !== ns)
      {
        delete rootObject[currentPart];
        throw Error.argument('namespacePath', Sys.Res.invalidNameSpace);
      }
      ns.getName = function ns$getName() { return this.__typeName; }
    }
    rootObject = ns;
  }
}
发挥程序员“磨”的精神,把它代码删到仍然可以运行的地步,最后的结果只有两行:
  var ns = window["ZU"] = {};
  ns.__namespace = true;
最重要的也就是第二行:把__namespace属性设为true即可。但我没查到__namespace到底是何方属性。副产品,找到一个网页,作者也是指出要设__namespace的。
http://www.robrich.org/archive/2007/12/21/JavaScript-namespace.aspx

现在,我就可以方便地把自己的程序组形成一个命名空间,要做的,只是在var ZU = {};之后加一句:
ZU.__namespace = true;
这样VS环境就认为ZU为命名空间。不过,除了提示的符号不一样,其它的一点都没差别。

posted on 2009-01-21 11:57  yzx99  阅读(474)  评论(0编辑  收藏  举报