Javascript 中的 proxy 实现

现在写代码都有个倾向,尽量用简单逻辑,短小的词汇来构成,甚至用到了大量 shortcut (叫 短名 ?),比如多种浏览器都提供了 console API,用来做 log 是不错的,但是到处都 console.log(…) 并不怎么理想,如果可以缩短成 $.log(…) (使用 jquery )就挺好的,而且还有利于屏蔽各种浏览器的差异,随意控制是否启用日志监控。

这里就是需要将 console.log 转换成 $.log,当然还有其它如 error, info。最简单的想法就是

if (window.console) {
    $.log = console.log 
} else {
    $.log = function() {}
}

不过,这个做法仅仅得到 firebug 的支持,在 webkit 中会报告 Uncaught exception,那尝试提供一个 console 的 proxy?
在 Java 中真是小菜一碟,js 里也不难:

$.log = function() {
    console.log.apply(console, arguments);
}

不过,问题就是怎么看,怎么不优雅,太啰嗦,还是原来那个对象,apply 后依然是 console, 还是那个方法,log,实际上就是传递一下参数。是不是有点蠢了。

然后,就没有然后了。我没办法让它更优雅了。

想要得到一个缩略的用法 $.log(…),是有代价的,不过还是值得的。

另外,基于以前的实验,大量的 apply 会明显影响性能,所以,apply 有风险,使用需谨慎。