I have done something similar in Class.addBehavior:
http://github.com/kangax/protolicious/tree/master/class.addbehavior.js
On the other hand, it's actually pretty easy to do this with plain
Function#wrap:

(function(p){
  p.push = p.push.wrap(function(){
    var args = $A(arguments), proceed = args.shift();
    console.log('before: ' + args);
    (function(){ console.log('after: ' + args) }).defer();
    return proceed.apply(proceed, args);
  })
})(Array.prototype);

It's arguably not as "clean" as your implementation, so some could
definitely find it useful : )

- kangax

On May 14, 12:13 pm, Pat Nakajima <[EMAIL PROTECTED]> wrote:
> I've started putting together a way to specify per-object before/after
> callbacks for any method. Probably not something to go in core, but
> maybe something that would be interesting to core contributors.
>
> There are some examples in a GitHub wiki (http://github.com/nakajima/
> nakatype/wikis/callbacks), but basically, you specify callbacks like
> so:
>
>   var someArray = [1,2,3];
>
>   Callbacks.add(someArray, {
>     before: {
>       push: function(entry) {
>         var msg = 'about to push ' + entry + ' on array: ' +
> this.join(', ');
>         console.info(msg);
>       }
>     },
>
>     after: {
>       push: function(entry) {
>         var msg = 'just pushed ' + entry + ' on array: ' +
> this.join(', ');
>         console.info(msg);
>       }
>     }
>   });
>
>   someArray.push(4);
>
> In addition to adding 4 to someArray, the above code snippet will log
> to the console before and after.
>
> If anybody has any suggestions/criticisms/threats, please do share!
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Prototype: Core" group.
To post to this group, send email to prototype-core@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/prototype-core?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to