Javascript jQuerys$.each()是如何工作的?

Javascript jQuerys$.each()是如何工作的?,javascript,jquery,frameworks,Javascript,Jquery,Frameworks,也许标题不好,但这是我的问题: 我正在构建一个框架来学习更多关于javascript的知识。我想使用“jQuery”样式 如果()是可选的,如何创建函数? $("p").fadeOut(); //() is there $.each(arr, function(k, v) {...}); //Dropped the (), but HOW? 这是我想到的,但它不起作用: $2DC = function(selector) { return new function() {

也许标题不好,但这是我的问题: 我正在构建一个框架来学习更多关于javascript的知识。我想使用“jQuery”样式

如果
()
是可选的,如何创建函数?

$("p").fadeOut(); //() is there
$.each(arr, function(k, v) {...}); //Dropped the (), but HOW?
这是我想到的,但它不起作用:

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


$2DC("#id1"); //Work
$2DC("#id2").circle(); //Work
$2DC.circle(); //DONT WORK

$。您引用的每个
方法都是
$
函数对象上的属性

jQuery中的
$
对象是一个函数对象,与JavaScript中的任何对象一样,您可以为该对象分配属性


调用
$
函数对象充当构造函数,并返回由
jQuery.fn.init()
函数创建的新对象实例。
jQuery
的原型被复制到
jQuery.fn.init
,这样新创建的对象实例就可以访问
jQuery
上定义的方法和插件。函数是JavaScript中的对象。因此,它们可以用作变量,就像int、string等

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

var f = function(text){
    alert(text);
}
f.fn1 = function(text){
    alert('fn:'+text);
}
f.fn2 = function(text){
    alert('fn2:'+text);
}

f('hi'); //hi;
f.fn1('hi'); //fn:hi;
f.fn2('hi'); //fn2:hi;
$2DC.circle()
不起作用,因为
圆圈
只是返回对象的属性,而不是
$2DC
本身的属性

$的情况下,每个
,其工作原理是
$
包含一个
每个
属性。您的
$2DC
也可以这样做。像这样:

$2DC.circle = function(){
}

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

$
实际上只是
jQuery
函数的别名。您可以使用以下命令调用该函数:

jQuery(“p”)
$(“p”)

但请记住,在JavaScript中,您可以将“东西”直接附加到函数

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

foo.func(); //alerts "hi"
这就是jQuery的
每个
函数(概念上)的定义方式

jQuery.each = function(someArr, callback) { ...
现在,每个
都是一个函数,可以这样调用:

jQuery.each([1, 2, 3], function(i, val) {
});
$2DC = (function(selector)
{
    return new function() {
        return {
            circle : function()
            {
                //...
            }
        }
    }
})();
还是更熟悉

$.each([1, 2, 3], function(i, val) {
});

因此,针对您的具体情况,支持:

$2DC.circle(); 
您必须将
圆圈
函数直接添加到
$2DC

$2DC.circle = function(){
   // code
};
这不起作用,因为$2DC没有任何名为
circle
的函数。这只是一个函数

var f = function(text){
    alert(text);
}
f.fn1 = function(text){
    alert('fn:'+text);
}
f.fn2 = function(text){
    alert('fn2:'+text);
}

f('hi'); //hi;
f.fn1('hi'); //fn:hi;
f.fn2('hi'); //fn2:hi;
其中as
$2DC(“#id2”)
返回一个新函数,该函数包含具有
circle
函数so
$2DC(#id2”).circle()的对象对你来说很好

如果你定义

$2DC.circle = function(){

};
您可以使用
$2DC.circle()

像这样尝试:

jQuery.each([1, 2, 3], function(i, val) {
});
$2DC = (function(selector)
{
    return new function() {
        return {
            circle : function()
            {
                //...
            }
        }
    }
})();

这样,$2DC是函数返回的对象,而不是函数本身。

创建基本函数,然后向函数添加方法

var f = function(text){
    alert(text);
}
f.fn1 = function(text){
    alert('fn:'+text);
}
f.fn2 = function(text){
    alert('fn2:'+text);
}

f('hi'); //hi;
f.fn1('hi'); //fn:hi;
f.fn2('hi'); //fn2:hi;

它可以通过这样的方式实现

$.fn.each = function (otherparams);

$.each = function (collection, otherparams) {
  return $.fn.each.apply(collection, arguments.slice(1));
};
将每个添加为fn的属性(只是jQuery.prototype的别名)意味着它可以作为每个jQuery集合的方法使用。代码的第二位意味着它可以作为参数在集合中传递


(和)是javascript的一些最有用的功能,一旦你习惯了它们。

你的标题令人困惑。我认为,
$。()
甚至都不是有效的JavaScript。如果你想从jQuery学习,那么我认为最好看看源代码:对于投票否决我的人来说,你一定是个天才:在这种情况下,
$2DC
不再是一个函数,它只是一个普通对象<代码>$2DC(“id1”)不再工作。这不是OP想要的。我投票否决了你,因为你没有在回答中解释代码。它是一个对象,返回函数,就像jQuery!试试小提琴,然后
jQuery
是一个函数(它是一个对象)。它可以这样调用:
jQuery('p')
。在您的回答中,
$2DC
只是一个普通对象(不是函数),因此
$2DC('p')
不起作用;这是jQuery的源代码,想再争论一下吗?谢谢!)那真的很容易。。。我通过构建一个框架学到了很多东西。@Sawny-当然。JavaScript非常有趣+1,即使你以4秒的优势击败了我的启蒙徽章:-)@AdamRackis:我是一个答案忍者^_^