摘自《Javascript权威教程》

  • Monkey Path:
1
2
3
4
5
6
7
8
9
10
> function trace(o, m){
> var original = o[m];
> o[m] = function(){
> console.log(new Date(), "Entering:", m);
> var result = original.apply(this, arguments);
> console.log(new Date(), "Exiting:", m);
> return result;
> };
> }
>

上面这种方法,更像是装饰器——动态添加了函数对象原本不支持的职责,缺不破坏函数本身。

  • Bind方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
> if(!Function.prototype.bind) {
> Function.prototype.bind = function(o /*, args */){
> // 将this 和arguments 的值保存至变量中
> // 以便后面嵌套的函数中可以使用它们
> var self = this, boundArgs = arguments;
>
> return function() {
> var args = [], i;
> for(i=1; i < boundArgs.length; i++) args.push(boundArgs[i]);
> for(i=0; i < arguments.length; i++) args.push(arguments[i]);
> return self.apply(o, args);
> };
> };
> }
>

上面是对使用ECMA-Script3 标准对ECMA-Script5标准的扩展。支持动态绑定,就像jQuery中的on方法。