zoukankan      html  css  js  c++  java
  • 在VS2008的JScript编辑器中显示为命名空间

    今天,我导入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为命名空间。不过,除了提示的符号不一样,其它的一点都没差别。

  • 相关阅读:
    5种类型的程序猿
    cocos2dx 关于lua 绑定的环境配置官方文档翻译与 将自己定义c++方法绑定到lua的的方法
    智能聊天机器人实现(源代码+解析)
    storm trident merger
    分析Redis架构设计
    Spring+Struts+Hibernate 简介(转)
    java面试题(开发框架)
    Jsp+Servlet+JavaBean经典MVC模式理解
    Loadrunner中影响"响应时间"的设置
    phpredis中文手册——《redis中文手册》 php版(转)
  • 原文地址:https://www.cnblogs.com/yzx99/p/1379377.html
Copyright © 2011-2022 走看看