Javascript jQuerys$.each()是如何工作的?
也许标题不好,但这是我的问题: 我正在构建一个框架来学习更多关于javascript的知识。我想使用“jQuery”样式 如果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() {
()
是可选的,如何创建函数?
$("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:我是一个答案忍者^_^