我目前正在研究John Resig的 JavaScript Ninja的秘密,我希望有人可以帮助我进一步理解其中一个示例。
它是一个允许对对象进行方法重载的函数,每个重载都有自己的定义和行为。他在这里写了博客。
代码如下所示:
function addMethod(object, name, fn) {
var old = object[name];
object[name] = function(){
if (fn.length == arguments.length)
return fn.apply(this, arguments)
else if (typeof old == 'function')
return old.apply(this, arguments);
};
并像这样使用:
addMethod(obj,'funcName',function(){});
addMethod(obj,'funcName',function(a){});
addMethod(obj,'funcName',function(a,b){});
我想我了解它的大部分工作原理,但你可以得到比我从上面的博客文章中给出的更好的解释)。
但是,它访问old
和fn
使用闭包的值,我仍在研究。
编辑 - 在jsFiddle
下面添加。
当试图理解它时,我意识到线路返回fn.apply(this, arguments)
可能只是return fn()
看起来相同的结果。请参阅此jsFiddle中的示例。
apply
那么,如果不需要,为什么要使用语法呢?
我尝试在没有应用的情况下使用jsFiddle中的示例,但它似乎总是
此外,当我们返回这些函数时究竟发生了什么,尤其是在以下情况下:
return old.apply(this, arguments);
我真的很想深入了解如何使用这种方法,以及它为什么有效,因此任何见解都将不胜感激。
谢谢