Не нужны скобки, когда не передаются аргументы - PullRequest
1 голос
/ 14 ноября 2010

Я создаю функцию с этой строкой:

window.Spark = window.$ = function(selector, context) { ... };

Но у меня возникает проблема (очевидно), если я вызываю функцию, подобную этой $('p').content('Hi!');, тогда все работает отлично, потому что я лечукак функция.Однако, когда я запускаю функцию, подобную этой $.ajax('get', 'example.txt');, я получаю эту ошибку $.ajax is not a function.Это потому, что я не включаю скобки.Кто-нибудь знает способ обойти это?Я видел в источнике jQuery, что у них есть функция внутри функции.Это то, что мне нужно?

Спасибо за любую помощь, которую вы можете предложить.

Ответы [ 5 ]

4 голосов
/ 14 ноября 2010

Я предполагаю, что в скобках вы подразумеваете скобки.

В jQuery $ - это функция со свойствами.
Вы можете повторить этот тип поведения, просто назначив свойства $:

window.Spark = window.$ = function(selector, context) { ... };

$.ajax = function(method, url) { ... };
1 голос
/ 14 ноября 2010

Функции являются первоклассными гражданами в JavaScript, т. Е. Вы можете обращаться с ними так же, как с объектами в ООП. Им можно присвоить свойства, и эти свойства могут быть функциями по очереди.

Итак, $.ajax на самом деле является ничем иным, как свойством ajax, которое является "членом" функции (объекта) $, которая оказывается функцией.

Так долго.

1 голос
/ 14 ноября 2010

Если вы помещаете функцию в функцию, которая является локальной по отношению к внешней функции, поэтому ее нельзя вызывать извне функции.

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

var $ = function() { alert("1"); };

$.ajax = function() { alert("2"); };

$(); // shows "1"
$.ajax(); // shows "2"
0 голосов
/ 14 ноября 2010

Я почти уверен, что это не имеет ничего общего с "не включая скобки", что бы это ни значило.В jQuery идентификатор $ представляет объект функции, имеющий несколько атрибутов.Одним из этих атрибутов является ajax, который содержит функцию, которая выполняет вызов AJAX.Тот факт, что вы вызываете свою собственную функцию $, не означает, что она автоматически получает функциональность jQuery.Если вы хотите, чтобы $.ajax была функцией, вам нужно определить ее.

0 голосов
/ 14 ноября 2010

Гм .... $.ajax должна быть функция, которая будет вызываться таким образом. Поэтому либо определите функцию «ajax», либо не используйте ее.

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