jQuerys $ .each()如何工作?

Saw*_*wny 9 javascript jquery frameworks

也许是一个糟糕的标题,但这是我的问题:我正在构建一个框架来了解有关javascript的更多信息.我想用""jQuery""风格.

如何在()可选的位置创建一个函数?

$("p").fadeOut(); //() is there
$.each(arr, function(k, v) {...}); //Dropped the (), but HOW?
Run Code Online (Sandbox Code Playgroud)

这是我提出的,但它不起作用:

$2DC = function(selector)
{
    return new function() {
        return {
            circle : function()
            {
                //...
            }
        }
    }
}


$2DC("#id1"); //Work
$2DC("#id2").circle(); //Work
$2DC.circle(); //DONT WORK
Run Code Online (Sandbox Code Playgroud)

Ada*_*kis 23

$实际上只是该jQuery函数的别名.你可以用以下方法调用该函数:

jQuery("p"); 要么 $("p");

但请记住,在JavaScript中,您可以将"stuff"直接附加到函数中.

function foo(){
}
foo.blah = "hi";
foo.func = function() { alert("hi"); };

foo.func(); //alerts "hi"
Run Code Online (Sandbox Code Playgroud)

这就是(概念上)jQuery each函数的定义方式.

jQuery.each = function(someArr, callback) { ...
Run Code Online (Sandbox Code Playgroud)

所以现在jQuery.each是一个可以这样调用的函数:

jQuery.each([1, 2, 3], function(i, val) {
});
Run Code Online (Sandbox Code Playgroud)

或者更熟悉

$.each([1, 2, 3], function(i, val) {
});
Run Code Online (Sandbox Code Playgroud)

因此,对于您的特定情况,支持:

$2DC.circle(); 
Run Code Online (Sandbox Code Playgroud)

您必须将该circle功能直接添加到$2DC:

$2DC.circle = function(){
   // code
};
Run Code Online (Sandbox Code Playgroud)


Roc*_*mat 6

函数是JavaScript中的对象.因此,它们可以用作变量,就像整数,字符串等一样.

在您的示例中,$2DC是一个返回包含circle函数的对象的函数.

$2DC.circle();不起作用circle只是返回对象的属性,而不是$2DC它自己.

在这种情况下$.each,这适用于$包含each属性.你$2DC也可以这样做.像这样:

$2DC.circle = function(){
}
Run Code Online (Sandbox Code Playgroud)

现在,$2DC.circle();将工作.因此,正如您所看到的那样,函数是对象,因此可以像其他对象一样具有属性.