Not needing brackets when not passing any arguments
I am creating a function with this line:
window.Spark = window.$ = function(selector, context) { ... };
But I am having a problem (obviously), if I call a function like this $('p').content('Hi!');
then everything works great because I am treating $ like a function. However, when I run a function like this $.ajax('get', 'example.txt');
I get this error $.ajax is not a function
. This is because I am not including the brackets. Does anyone know a way around this? I saw in the jQuery source that they have a function within a functi开发者_StackOverflow中文版on. Is this the sort of thing I need?
Thanks for any help you can offer.
I assume by brackets you mean parentheses.
In jQuery, $
is a function with properties.
You can replicate this type of behavior simply by assigning properties to $
:
window.Spark = window.$ = function(selector, context) { ... };
$.ajax = function(method, url) { ... };
Functions are first class citizens in JavaScript, i.e. you may treat them like objects are being treated in OOP. It's possible to assign properties to them and those properties may be functions in turn.
So, $.ajax
is really nothing else then the property ajax
that's a "member" of the function (object) $
that happens to be a function.
So long.
If you put a function within a function it's local to the outer function, so it's not possible to call it from outside the function.
A function in Javascript is an object like any other, so you can add properties to it, and the property can be a function:
var $ = function() { alert("1"); };
$.ajax = function() { alert("2"); };
$(); // shows "1"
$.ajax(); // shows "2"
Um.... $.ajax
needs to be a function to be called like that. So either define the 'ajax' function or don't use it.
I'm pretty sure it has nothing to do with "not including the brackets," whatever that means. In jQuery, the identifier $
represents a function object that has several attributes. One of these attributes is ajax
, which contains a function that performs an AJAX call. Just because you call your own function $
doesn't mean it automagically gets the functionality of jQuery. If you want $.ajax
to be a function, you'll need to define it.
精彩评论