Как $ jQuery является функцией и объектом? - PullRequest
22 голосов
/ 29 августа 2011

Я имею в виду объект как в {} [object Object].Как это работает $(selector) и $.fn.init одновременно?

Можете ли вы привести простой пример, пожалуйста?

Ответы [ 8 ]

31 голосов
/ 29 августа 2011

Это не уникальный jQuery, а аспект javascript.Все функции являются объектами.Например:

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

alert(f.foo); // alerts "bar"
f();          // alerts "yo"
5 голосов
/ 29 августа 2011

$ - это функция. метод $ может вернуть любую вещь.

Например:

$ = 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
5 голосов
/ 29 августа 2011

Javascript - это объектно-ориентированный язык, поэтому функции являются объектами, просто красивыми, которые вы можете вызывать.

foo = function() { console.log("foo") }
foo.bar = function() { console.log("bar") }
foo() //=> prints "foo"
foo.bar() //=> prints "bar"
3 голосов
/ 08 мая 2014

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 () {
   }
2 голосов
/ 08 ноября 2014
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();
2 голосов
/ 29 августа 2011

люди играют с функциями 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);

Интересно, что есть библиотека с именем underscore ..

2 голосов
/ 29 августа 2011

Это объект.

$ содержит различные функции.

Вы можете проверить это самостоятельно, создав собственный объект:

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

function $(id){
      return $.select(id);
}
1 голос
/ 29 августа 2011
var s = function(){};
s.test = function(){console.log('inside s');}
s.test();

совершенно законный код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...