• 标题党too。

    今天打球输了,郁闷。第一次打系列赛以全负战绩结束,丫的。

    以后得加强体能训练,下半场眼睁睁地看对方抢篮板。

    呃,好像叫上宿舍几个来的更实在些,丫,切了这群小样的。

    好了,罚自己洗澡打牌去。

  • 咳,最大的好处就是不用修改原来的js代码,可以对方法新增一些功能,比如,这个例子中,判断
    文件文件是否已经被打开了,即锁定了。enjoy it.
    //test.html
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
            <script language="JavaScript" src="aopFramework.js"></script>
            <script language="JavaScript">
               
               
                function Documents(){};
                Documents.prototype={
                    _id:0,
                    _name:'',
                    name:function(){
                        return this._name;
                        },
                    id:function(){
                        return this._id;
                        },
                    save:function(){
                        return true;
                        },
                    open:function(id){
                        this._id = id;
                        this._name = 'test Open';
                        return true;
                        }
                    }
                function openDocument(id){
                        var doc = new Document();
                        try{
                            document.open(id);
                            }
                            catch(e){
                                alert(e);
                                return;
                                }
                        alert("Doc id: " + doc.id());
                        return doc;
                }
                function Lockable(){}
                    Lockable.prototype = {
                    _locked: false,
                   
                      locked: function() {
                        return this._locked;
                      }
                }
                function lockOnOpen()
                {
                  // Lock this object        
                  // If we didn't succeed
                 // throw (new Error ("Failed locking " + this._name));
                    if(this._locked == true){
                        throw (new Error ("Failed locking " + this._name));
                    }
                  // The object is locked
                 this._locked = true;
                 alert("locked");
                 
                }
                function allTest(){
                        try {
                             //增加对象的属性,prototype
                             Aspects.addIntroduction(Lockable, Documents);
                             //增加对象方法的预处理
                          Aspects.addBefore(lockOnOpen, Documents, "open");
                        }
                        catch(e)
                        {
                          alert(e);
                        }
                        var doc = new Documents();
                      try {
                        doc.open(222);
                      }
                      catch(e)
                      {
                         
                        alert(e);
                      }
                   
                      // Update icons and other user elements affected
                      alert("Doc id: " + doc.id());
                      try {
                        doc.open(222);
                      }
                      catch(e)
                      {
                         
                        alert(e);
                      }
                   
                      // Update icons and other user elements affected
                      alert("Doc id: " + doc.id());
                     
                    }
               
                </script>
            </head>
           
        <body onload="allTest();">
            </body>
    </html>

    //aopFramework.js
    InvalidAspect = new Error("Missing a valid aspect. Aspect is not a function.");
    InvalidObject = new Error("Missing valid object or an array of valid objects.");
    InvalidMethod = new Error("Missing valid method to apply aspect on.");

    Aspects = new Object();

    Aspects._addIntroduction = function(intro, obj)
    { for (var m in intro.prototype)
        {
          obj.prototype[m] = intro.prototype[m];
        }
    }

    Aspects.addIntroduction = function(aspect, objs)
    {
      var oType = typeof(objs);

      if (typeof(aspect) != 'function')
        throw(InvalidAspect);

      if (oType == 'function')
      {
        this._addIntroduction(aspect, objs);
      }
      else if (oType == 'object')
      {
        for (var n = 0; n < objs.length; n++)
        {
          this._addIntroduction(aspect, objs[n]);
        }
      }
      else
      {
        throw InvalidObject;
      }
    }

    Aspects.addBefore = function(aspect, obj, funcs)
    {
      var fType = typeof(funcs);

      if (typeof(aspect) != 'function')
        throw(InvalidAspect);

      if (fType != 'object')
        funcs = Array(funcs);

      for (var n = 0; n < funcs.length; n++)
      {
        var fName = funcs[n];
        var old = obj.prototype[fName];

        if (!old)
          throw InvalidMethod;

        obj.prototype[fName] = function() {
          aspect.apply(this, arguments);
          return old.apply(this, arguments);
        }
      }
    }

    Aspects.addAfter = function(aspect, obj, funcs)
    {
      if (typeof(aspect) != 'function')
        throw InvalidAspect;

      if (typeof(funcs) != 'object')
        funcs = Array(funcs);

      for (var n = 0; n < funcs.length; n++)
      {
        var fName = funcs[n];
        var old = obj.prototype[fName];

        if (!old)
          throw InvalidMethod;

        obj.prototype[fName] = function() {
          var args = old.apply(this, arguments);
          return ret = aspect.apply(this, Array(args, null));
        }
      }
    }

    Aspects._getLogic = function(func)
    {
        var oSrc = new String(func);
        var nSrc = '';
        var n = 0;

        while (oSrc[n])
        {
          if (oSrc[n] == '\n' || oSrc[n] == '\r')
            nSrc[n++] += ' ';
          else
            nSrc += oSrc[n++];
        }

        n = 0;
        while (nSrc[n++] != '{');
        nSrc = nSrc.substring(n, nSrc.length - 1);
        return nSrc;
    }

    Aspects.addAround = function(aspect, obj, funcs)
    {
      if (typeof(aspect) != 'function')
        throw InvalidAspect;

      if (typeof(funcs) != 'object')
        funcs = Array(funcs);

      var aSrc = this._getLogic(aspect);

      for (var n = 0; n < funcs.length; n++)
      {
        var fName = funcs[n];
        if (!obj.prototype[fName])
          throw InvalidMethod;

        var oSrc = 'var original = ' + obj.prototype[fName];
        var fSrc = oSrc + aSrc.replace('proceed();',
                     'original.apply(this, arguments);');
        obj.prototype[fName] = Function(fSrc);
      }

      return true;
    }
  •        呼,需求的重要性阿,nnd。受不了了。事情怎么都是赶到一起了呢。

    好吧,深呼吸,“阿,世界多么美好啊~~~~~~”。

        btw,我人品问题,用不了沙茶。

  • 休养生息

    Tag:

    发现身边的人都在休养生息,呃,我也算休养生息吧。

    今天打篮球了,暴打3个小时,把对方的1,2,3,4,5号位统统虐了一遍-_-,最后结果是 体力不支-_-

    下周干什么呢?呃,看看书吧,最近发现不少好书,哈。算了不说了,等啥时把笔记贴出来再说,免得被人海扁。

  • http://www.dotvoid.com/view.php?id=43

    mark一下,回头再写上,哈。

  • 忙啊~

    Tag:

    为年前的后续烦恼,顺利的话,下周有时间了,我会把servlet的笔记补上,呃,还有这几天的培训内容,

    uml应用。说实话,多吃几年米还是有用的,归纳也是必须的,听课还是很有用了,我有多久没有像这几天这样听课了?6年还是7年?忘记了-_-

  • 回来了^_^

    Tag:

    在家呆着就是舒服啊,T_T,就不能不上班。

    好好加油,然后再回家好好过年,哈哈。

    恩,今年一定要好好执行计划了,又一次这么说了。(我为什么说又-_-)。吃饭去。

  •        在放了两天羊之后,终于要回家了。感谢boss没有让我过年值班,hiahia。

    哥们就先闪人了。xd们新年快乐。有好事要惦记着咱呐。有啥事需要帮手的也惦记咱一下,咔咔。来,跟我默念,深呼吸,“世界多么美好啊……”。

         小村,我胡汉三又回来了。

     

    ps:占个位置,回来写个serlvet的笔记,恩,js的aop,hiahia。

  • 安心过年

    Tag:

    事情终于稳定了,呵,至少年前不用劳神费力了,so,可以安心过年了。2006年是发展的一年,令人振奋的一年,(以下省略1000字),回顾2006,展望2007,……。

    总的来说,2006比上不足比下有余,做人要学会知足不是。最重要的是家人、朋友都健康,呵呵,谢谢帮过我的家人和朋友,and 菩萨各路神仙^_^。

    2007要好好加油了,实现目标,加油加油。

  •         今年的年成不怎么样。不管是好是坏,都可以收心过年了。明年去哪还真的很难决定,呼。

           想象自己也算是弱势群体?事情都是别人说了算?被人放鸽子那是很平常的事。

          今天看了一部电影,呃,好吧,没有版权的那种。就记住了其中的一句话,为自己而工作,你会做得更好。也许我明天就可以开始转变我的观念吧。呃,明天还要上班,o,shit。

         马上就本命年了,还是老老实实滴比较合适。