2014-08-27 2 views
1

Я просмотрел различные ответы на SO, которые отвечают на подобные вопросы, но никто не ответил на то, что я ищу. Примеры здесь:Как создать jQuery как цепочку методов при сохранении пространства имен?

jQuery prototype and constructor function chaining

How does basic object/function chaining work in javascript?

Я хотел бы быть в состоянии методов цепи от функции, но также использовать эту функцию в качестве пространства имен. Вы можете использовать объект Jquery как функция, как так:

$('selector'); 

, но вы также можете связаться методами прямо из переменных $, например, так:

$.ajax(

Как это достигается? Я пробовал смотреть в источник jquery, но почти невозможно следовать.

+0

, что вы решили «пространство имен» означает? – djechlin

+0

@djechlin namespacing = var thing = {}; thing.string = 'string'; thing.function = function() {}; –

+0

Вы хотите добавить атрибуты или свойства к объекту? – djechlin

ответ

0

В функциях Javascript являются первоклассными объектами. В частности, это объекты.

var greet = function(name) {console.log("Hello, " + name + "!"); }; 
greet.lang = "English"; 

Законный. Тогда следующие оба справедливы:

greet("Alice"); // prints Hello, Alice! 
console.log(greet.lang); // prints English 

Я не думаю, что это правильно назвать $(...) конструктор. В Javascript линия между конструктором и функцией размыта, но обычно я бы сказал, что конструктор используется с new и, по соглашению, начинается с буквы «Столица». $ - это просто объект, и в частности тот, который является функцией, поэтому может быть вызван и имеет другие свойства, к которым можно получить доступ.

Я также не позвонил бы $, или в моем примере greet, пространство имен. Возможно, вы думаете о синтаксисе пакета в Java, где com.mycompany.util.StringFunctions будет иметь пространство пакетов/имен com.mycompany.util или в C++, где это может быть написано как MyCompany::Util::StringFunctions. Javascript не совсем имеет эту концепцию, но в более или менее любом языке OO его можно моделировать с помощью объектов, как указано выше. Я бы сказал, $ просто чувствует, как это пространство имен, потому что это довольно большая библиотека, но это огромная библиотека, которая реализована как один объект, который также является функцией со многими свойствами.

+0

Это ... потрясающе. Не имел представления. Благодарю. –

+1

Языки @ergusto становятся намного приятнее, когда функции являются объектами первого класса. Вам может понравиться Haskell, или Lisp, или Scala. Но Javascript достаточно глубок, как только вы преодолеете все свои навороченные функции (например, NaN! == NaN). Наслаждаться. – djechlin

+0

Да.Я определенно начинаю видеть преимущества этого. Большое спасибо за объяснение. Есть что-то еще, что я заметил во время игры с jQuery, хотя - при написании чего-то вроде $ ('div') в консоли - jQuery возвращает список элементов, но все же можно запускать методы из этой переменной - то есть, если он возвращается этот список, как он может также вернуть «это», чтобы можно было запустить больше методов? –

0

Просто попробуйте это:

var foo = function(){ 
    alert ("I'm a function beep beep"); 
    }; 

foo.bar = "This is a string"; 

foo.otherFoo = function (param) { 
    alert ("I'm also a function blup blup"+param); 
    }; 

Тогда вы можете вызвать первую функцию foo(), переменная foo.bar или вторую функцию со значением foo.otherFoo(" and more blup.")

Смежные вопросы