Я имею в виду объект, как в {} [object Object]
. Как это сделать $(selector)
и $.fn.init
в то же время?
Можете ли вы дать мне простой пример?
Я имею в виду объект, как в {} [object Object]
. Как это сделать $(selector)
и $.fn.init
в то же время?
Можете ли вы дать мне простой пример?
Это не уникально для jQuery, а для аспект javascript. Все функции - это объекты. Например:.
var f = function() { alert('yo'); }
f.foo = "bar";
alert(f.foo); // alerts "bar"
f(); // alerts "yo"
Javascript - это объектно-ориентированный язык, поэтому функции ARE объекты, просто причудливые, которые вы можете вызвать.
foo = function() { console.log("foo") }
foo.bar = function() { console.log("bar") }
foo() //=> prints "foo"
foo.bar() //=> prints "bar"
$
- это функция.
метод $может возвращать любую вещь.
Например:
$ = 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
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 () {
}
Это объект.
$
содержит разные функции.
Вы можете проверить это самостоятельно, создав свой собственный объект:
var $ = {
select: function(id){return document.getElementById(id);}
}
function $(id){
return $.select(id);
}
люди играют вокруг с функциями 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);
Интересно, что есть библиотека под названием подчеркивание тоже.
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();
var s = function(){};
s.test = function(){console.log('inside s');}
s.test();
- совершенно законный код.