代码改变世界

AOP in JavaScript

2010-03-01 23:05  爱研究源码的javaer  阅读(187)  评论(0编辑  收藏  举报

// function hello() {

//     for (var i = 0; i < arguments.length; i++) {

//         arguments[i] += "[hello]";
//     }
//     return arguments;
// }

// //console.log(Array.prototype.join.apply(args, [' ']));//World[hello] JavaScript[hello]

// var aspect = { before: function(context, targetName, fn) {
//     var target = context[targetName];

//     context[targetName] = function() {
//         return target.apply(context, fn.apply(context, arguments));
//     }
// }

//};

//aspect.before(window, 'hello', function() {
//    for (var i = 0; i < arguments.length; i++) {
//        arguments[i] += "[before]";
//    }
//    return arguments;
//});

//var args = hello('World', 'JavaScript');


 var aspect = { before: function(context, targetName, fn) {
     var target = context[targetName];
     context[targetName] = function() {

         return target.apply(context, fn.apply(context, arguments));
     }
 }, after: function(context, targetName, fn) {
     var target = context[targetName];

     context[targetName] = function() {
         return fn.apply(context, target.apply(context, arguments));
       };
     }
 };

 function hello() {

     for (var i = 0; i < arguments.length; i++) {
         arguments[i] += "[hello]";
     }
     return arguments;
 }

 aspect.before(window, 'hello', function() {
     for (var i = 0; i < arguments.length; i++) {
         arguments[i] += "[before]";
     }
     return arguments;
 });

 aspect.after(window, 'hello', function() {
     for (var i = 0; i < arguments.length; i++) {
         arguments[i] += "after";
     }
     return arguments;
 });

 var args = hello('World', 'JavaScript');
 
 console.log(Array.prototype.join.apply(args,[' ']));
 
 //World[before][hello][after] JavaScript[before][hello][after]