扩展 jQuery addClass 以接受回调 - 它是如何工作的?

Extending jQuery addClass to accept callbacks - how does it work?

我是 jQuery 的新手,正在寻找一种方法来扩展 addClass 以接受回调。我找到了这个解决方案 here。下面是神奇的代码部分:

var oAddClass = $.fn.addClass;
$.fn.addClass = function () {
    for (var i in arguments) {
        var arg = arguments[i];
        if ( !! (arg && arg.constructor && arg.call && arg.apply)) {
            arg();
            delete arg;
        }
    }
    return oAddClass.apply(this, arguments);
}

谁能解释一下这里发生了什么?我掌握了编程术语的基本知识,并且我已经使用 jQuery 处理简单的内容,例如滚动广告。

此致,

努努

基本上它会遍历调用 addClass 时使用的所有参数。如果该参数是一个函数(通过 duck typing 发现该参数具有构造函数和 call/apply 方法),它将调用该函数并将其从 arguments arraylike 对象中删除。

最后,通过使用对原始 addClass 函数 (oAddClass) 的引用,将剩余的参数(非函数)应用到元素上,以便真正的 class 字符串也添加到元素。

作为旁注,为什么你需要对 setClass 进行回调,因为它不是异步的。