jQuery的$ a函数和对象如何?

时间:2011-08-28 20:09:58

标签: javascript jquery

我的意思是{} [object Object]中的对象。它如何同时$(selector)$.fn.init

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

8 个答案:

答案 0 :(得分:31)

这不是jQuery独有的,而是javascript的一个方面。所有功能都是对象。 E.g:

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

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

答案 1 :(得分:5)

Javascript是一种面向对象的语言,所以函数是ARE对象,只是你可以调用的花哨的对象。

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

答案 2 :(得分: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

答案 3 :(得分:3)

jQuery$是一项功能(您知道$是别名jQuery)。

// 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 );
},

在Javascript中,一切都是对象,甚至function。因此,您可以直接添加属性以实现功能。

   jQuery.find = function () {
   }

答案 4 :(得分:2)

这是一个对象。

$拥有不同的功能。

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

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

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

答案 5 :(得分:2)

人们玩javascript函数,它会导致有趣的设计模式.Jquery使用了许多这些模式,并围绕许多函数创建了一个很好的包装器。所以最终jquery就像一个静态类,使用它可以做到真正整洁东西..

像所有类一样,它有一个名称,默认名称是jQuery。 $是没有什么可以购买绑定到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);

添加我的本地函数是私有的,不会暴露在外面使用。在这种情况下,我无法使用Calculator.log访问我的日志函数,它会说在对象上找不到方法。

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

var _ =计算器;

现在使用calc函数,如

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

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

答案 6 :(得分:2)

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();

答案 7 :(得分:1)

var s = function(){};
s.test = function(){console.log('inside s');}
s.test();

是完全合法的代码。