Javascript jQuery';一个函数和一个对象?

Javascript jQuery';一个函数和一个对象?,javascript,jquery,Javascript,Jquery,我指的是{}[object object]中的对象。它如何同时执行$(选择器)和$.fn.init 你能给我举个简单的例子吗?它是一个物体 $具有不同的功能 您可以通过制作自己的对象来测试这一点: var $ = { select: function(id){return document.getElementById(id);} } function $(id){ return $.select(id); } 是完全合法的代码。Javascript是一种面向对象的语言

我指的是
{}[object object]
中的对象。它如何同时执行
$(选择器)
$.fn.init

你能给我举个简单的例子吗?

它是一个物体

$
具有不同的功能

您可以通过制作自己的对象来测试这一点:

var $ = {
     select: function(id){return document.getElementById(id);}
}

function $(id){
      return $.select(id);
}

是完全合法的代码。

Javascript是一种面向对象的语言,所以函数是对象,只是可以调用的奇特的对象

foo = function() { console.log("foo") }
foo.bar = function() { console.log("bar") }
foo() //=> prints "foo"
foo.bar() //=> prints "bar"

这不是jQuery所独有的,而是javascript的一个方面。所有函数都是对象。例如:

var f = function() { alert('yo'); }
f.foo = "bar";

alert(f.foo); // alerts "bar"
f();          // alerts "yo"

人们使用javascript函数,这会产生有趣的设计模式。。Jquery使用了许多这样的模式,并围绕许多函数创建了一个很好的包装器。。因此,jquery最终就像一个静态类,使用它可以完成非常简洁的工作

与所有类一样,它有一个名称,默认名称是jQuery。$isnothing是一个绑定到jQuery库中的标识符,它使您不必键入“jQuery”作为标识符

它是$符号这一事实是任意的。在某个时候,人们决定使用$符号,但事实是,它几乎可以是任何类型的ECMAScript可接受的标识符

我们使用$作为标识符的主要原因是,在键入一个字符而不是字符串时,您不太可能犯简单的打字错误

希望这能把事情说清楚。。如果我有什么不对劲,请纠正我

假设我自己的库的一个简单示例是假设一个计算器类

var Calculator= (function()
{

    function add(a,b)
    {
     return a+b;
    }
    function subtract(a,b)
    {
     return a-b;
    }
    function multiply()
    {
     return a*b;
    }
    function log()
    {
      console.log("log 123")
    }
    return
    {
     add: add,
     subtract: subtract,
     multiply: multiply
    }
}());
现在,我可以使用Calculator类执行以下操作:

Calculator.multiply(Calculator.add(2,3),5);
add my local函数是私有的,不公开在外部使用。在这种情况下,无法使用Calculator.log访问我的日志函数,它将显示在对象上找不到方法

现在回到你的问题,你可以这样做:

var=计算器

现在使用calc函数,如

_.multiply(_.add(2,3),5);

有趣的是,还有一个名为下划线的库。

$
是一个函数。 美元的方法可以返回任何东西

例如:

$ = function() {
     return {
                 foo : function() { return 'baa'; },
                 r1: 1,
                 r2 : 'string'
            }
};

typeof $ <- function 
typeof $() <- object
typeof $().foo <- function 
typeof $().foo() <- string
typeof $().r1; <- number 
typeof $().r2 <- string
$=function(){
返回{
foo:function(){return'baa';},
r1:1,
r2:“字符串”
}
};

typeof$
jQuery
$
是一个函数(您知道
$
jQuery
的别名)

在Javascript中,任何东西都是一个对象,甚至
函数也一样。因此,您可以直接向函数添加属性

   jQuery.find = function () {
   }

那么它是如何作为一个对象工作的呢?@David,因为在JavaScript函数中是对象
:)
。您可以将函数视为高级对象—它们可以完成常规对象所能完成的一切,但它们还具有一些附加功能…这是函数编程的全部要点。可以将函数作为参数传递,也可以作为参数返回,等等。。它们必须是对象。如果你想做这样的事情,为什么不使用一个单独的对象呢?@David如果你可以只使用一个对象,然后同时执行
$(…)
$。foo(…)
?那应该是“一种面向对象的函数式语言”,因为仅仅是面向对象并不意味着函数是第一类的,这对我来说并不适用。当我尝试它时,它返回“对象不是函数”——通常只有代码的答案。试着添加一个。谢谢。这应该是答案,我想这需要一点解释,但是玩了一会儿我明白了,谢谢你帮了我很多忙!
// Define a local copy of jQuery
jQuery = function( selector, context ) {
    // The jQuery object is actually just the init constructor 'enhanced'
    return new jQuery.fn.init( selector, context, rootjQuery );
},
   jQuery.find = function () {
   }
var q=function(){};

var s = function(){
    alert("base");
    window.s = s;
    return new q()};

q.fn = q.prototype = {};

q.fn.x = s.x = function(){alert("x");return this;};
q.fn.y = s.y = function(){alert("y");return this;};
q.fn.z = s.z = function(){alert("z");return this;};

s().y().z().x();
s.z().x().y();