<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    老妖的博客
    現實的中沒有幾個人能夠真為對方去死,甚至山盟海誓很快就會在金錢面前變的微不足道,這才是生活。沒有永遠的愛,除了你的父母對你,當然也就沒有永遠的恨,更沒有永遠的痛,時間是最好的治療大師,它會很快撫平你心靈上累累的傷痕。很多年以后你想起來時,那些在你生命中洶涌來往的人群至多是個模糊的影子或者毫無意義的名字
    posts - 105,  comments - 171,  trackbacks - 0
    aop_demo.html
    <script src="Aspects.js"></script>
    <script>
    // Business logic
    function makeGreeting(text) {
        
    return "Hello " + text + "!";
    }
    alert(makeGreeting(
    "world")); // Hello world!
    </script>
    <script>
    // Advices
    function aopizeAdvice(args) {
        args[
    0= "AOP " + args[0];    return args;
    }
    function shoutAdvice(result) {
        
    return result.toUpperCase();
    }
    function ciaoAdvice() {
        
    return "Bye-bye!";
    }
    </script>
    <script>
    // Weaver and fun
    Aspects.addBefore(this"makeGreeting", aopizeAdvice);
    alert(makeGreeting(
    "world")); // Hello AOP world!
    Aspects.addAfter(this"makeGreeting", shoutAdvice);
    alert(makeGreeting(
    "world")); // HELLO AOP WORLD!
    Aspects.addAround(this"makeGreeting", ciaoAdvice);
    alert(makeGreeting(
    "world")); // Bye-bye!
     </script>
    Aspects.js:
    Aspects = new Object();
    Aspects.addBefore = function(obj, fname, before) {
        var oldFunc = obj[fname];
        obj[fname] = function() {
            return oldFunc.apply(this, before(arguments, oldFunc, this));
        };
    };
    Aspects.addAfter = function(obj, fname, after) {
        var oldFunc = obj[fname];
        obj[fname] = function() {
            return after(oldFunc.apply(this, arguments), arguments, oldFunc, this);
        };
    };
    Aspects.addAround = function(obj, fname, around) {
        var oldFunc = obj[fname];
        obj[fname] = function() {
            return around(arguments, oldFunc, this);
        };
    };
    aop_demo.html

     

    script src="Aspects.js"></script>
    <script>
    //Business logic
    function Document(){}
        Document.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 = 'Ajax on AOP steroids'
            
    return true;
        }
    }
    function openDocument(id) {
        
    var doc = new Document();
        
    try {
            doc.open(id);
        } 
    catch(e) {
            alert(e);
            
    return;
        }
        
    // Update icons and other user elements affected
        alert("Doc id: " + doc.id());
        
    return doc;
    }
    </script>
    <script>
    //Advices
    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));

        
    // The object is locked
        this._locked = true;

        
    var ret = proceed();     

        
    return ret;
    }
    </script>
    <script>
    // Weaver and fun
    try {
        Aspects.addIntroduction(Lockable, Document);
        Aspects.addAround(lockOnOpen, Document, 
    "open");
        openDocument ( 
    "test");
    catch(e) {
      alert(e);
    }
    </script>
    Aspects.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 (oSrcn) {
            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;
    }
    posted on 2005-12-22 12:39 老妖 閱讀(827) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    <2005年12月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    隨筆分類(48)

    隨筆檔案(104)

    好友鏈接

    我的豆瓣

    積分與排名

    • 積分 - 220834
    • 排名 - 257

    最新評論

    閱讀排行榜

    主站蜘蛛池模板: 亚洲日韩国产精品乱| 亚洲嫩模在线观看| 中文字幕无码日韩专区免费| 婷婷精品国产亚洲AV麻豆不片| 国产精品免费精品自在线观看| 最新亚洲人成无码网www电影| 亚洲精品午夜无码专区| 免免费国产AAAAA片| 免费人成动漫在线播放r18| 亚洲成av人片天堂网| 高清国语自产拍免费视频国产| 国产成人1024精品免费| 亚洲剧情在线观看| 国产亚洲精品久久久久秋霞| 青青草免费在线视频| a毛片视频免费观看影院| 亚洲AV无码资源在线观看| 亚洲AV一宅男色影视| 国产大片线上免费看| 1000部禁片黄的免费看| 日韩免费高清一级毛片| 亚洲区精品久久一区二区三区| 国产日产亚洲系列| 免费看香港一级毛片| 亚洲黄色免费在线观看| 久青草视频在线观看免费| 亚洲国产精品无码久久98| 亚洲精品日韩中文字幕久久久| 国产精品亚洲w码日韩中文| 毛片免费视频播放| 精品无码AV无码免费专区| 九九热久久免费视频| 国产成人综合亚洲绿色| 精品亚洲国产成人| 亚洲成A∨人片在线观看不卡 | 亚洲自偷自偷偷色无码中文| 噜噜嘿在线视频免费观看| 免费观看国产网址你懂的| 美女网站在线观看视频免费的| 视频一区二区三区免费观看| 亚洲国产成人久久精品软件 |