2. jQuery Fundamentals
jQuery is a framework built using JavaScript capabilities. So you can
use all the functions and other capabilities available in JavaScript.
This chapter would explain most basic concepts but frequently used in jQuery.
String:
A string in JavaScript is an immutable object that contains none, one or many characters.
Following are the valid examples of a JavaScript String:
"This is JavaScript String"
'This is JavaScript String'
'This is "really" a JavaScript String'
"This is 'really' a JavaScript String"
Numbers:
Numbers in JavaScript are double-precision 64-bit format IEEE 754 values. They are immutable, just as strings.
Following are the valid examples of a JavaScript Numbers:
5350 120.27 0.26
Boolean:
A boolean in JavaScript can be either
true or
false. If a number is zero, it defaults to false. If an empty string defaults to false:
Following are the valid examples of a JavaScript Boolean:
true // true
false // false
0 // false
1 // true
"" // false
"hello" // true
Objects:
JavaScript supports Object concept very well. You can create an object using the object literal as follows:
var emp = {
name: "Zara",
age: 10
};
|
You can write and read properties of an object using the dot notation as follows:
// Getting object properties
emp.name // ==> Zara
emp.age // ==> 10
// Setting object properties
emp.name = "Daisy" // <== Daisy
emp.age = 20 // <== 20
|
Arrays:
You can define arrays using the array literal as follows:
var x = [];
var y = [1, 2, 3, 4, 5];
|
An array has a
length property that is useful for iteration:
var x = [1, 2, 3, 4, 5];
for (var i = 0; i < x.length; i++) {
// Do something with x[i]
}
|
Functions:
A function in JavaScript can be either named or anonymous. A named function can be defined using
function keyword as follows:
function named(){
// do some stuff here
}
|
An anonymous function can be defined in similar way as a normal function but it would not have any name.
A anonymous function can be assigned to a variable or passed to a method as shown below.
var handler = function (){
// do some stuff here
}
|
JQuery makes a use of anonymous functions very frequently as follows:
$(document).ready(function(){
// do some stuff here
});
|
Arguments:
JavaScript variable
arguments is a kind of array which has
length property. Following example explains it very well:
function func(x){
console.log(typeof x, arguments.length);
}
func(); //==> "undefined", 0
func(1); //==> "number", 1
func("1", "2", "3"); //==> "string", 3
|
The arguments object also has a
callee property, which refers to the function you're inside of. For example:
function func() {
return arguments.callee;
}
func(); // ==> func
|
Context:
JavaScript famous keyword
this always refers to the current context. Within a function
this context can change, depending on how the function is called:
$(document).ready(function() {
// this refers to window.document
});
$("div").click(function() {
// this refers to a div DOM element
});
|
You can specify the context for a function call using the function-built-in methods
call() and
apply() methods.
The difference between them is how they pass arguments. Call passes
all arguments through as arguments to the function, while apply accepts
an array as the arguments.
function scope() {
console.log(this, arguments.length);
}
scope() // window, 0
scope.call("foobar", [1,2]); //==> "foobar", 1
scope.apply("foobar", [1,2]); //==> "foobar", 2
|
Scope:
The scope of a variable is the region of your program in which it is defined. JavaScript variable will have only two scopes.
-
Global Variables: A global variable has global scope which means it is defined everywhere in your JavaScript code.
-
Local Variables: A local variable will be visible only
within a function where it is defined. Function parameters are always
local to that function.
Within the body of a function, a local variable takes precedence over a global variable with the same name:
var myVar = "global"; // ==> Declare a global variable
function ( ) {
var myVar = "local"; // ==> Declare a local variable
document.write(myVar); // ==> local
}
|
Callback:
A callback is a plain JavaScript function passed to some method as an
argument or option. Some callbacks are just events, called to give the
user a chance to react when a certain state is triggered.
jQuery's event system uses such callbacks everywhere for example:
$("body").click(function(event) {
console.log("clicked: " + event.target);
});
|
Most callbacks provide arguments and a context. In the event-handler
example, the callback is called with one argument, an Event.
Some callbacks are required to return something, others make that
return value optional. To prevent a form submission, a submit event
handler can return false as follows:
$("#myform").submit(function() {
return false;
});
|
Closures:
Closures are created whenever a variable that is defined outside the current scope is accessed from within some inner scope.
Following example shows how the variable
counter is visible within the create, increment, and print functions, but not outside of them:
function create() {
var counter = 0;
return {
increment: function() {
counter++;
},
print: function() {
console.log(counter);
}
}
}
var c = create();
c.increment();
c.print(); // ==> 1
|
This pattern allows you to create objects with methods that operate
on data that isn't visible to the outside world. It should be noted that
data hiding is the very basis of object-oriented programming.
Proxy Pattern:
A proxy is an object that can be used to control access to another
object. It implements the same interface as this other object and passes
on any method invocations to it. This other object is often called the
real subject.
A proxy can be instantiated in place of this real subject and allow
it to be accessed remotely. We can saves jQuery's setArray method in a
closure and overwrites it as follows:
(function() {
// log all calls to setArray
var proxied = jQuery.fn.setArray;
jQuery.fn.setArray = function() {
console.log(this, arguments);
return proxied.apply(this, arguments);
};
})();
|
The above wraps its code in a function to hide the
proxied variable. The proxy then logs all calls to the method and delegates the call to the original method. Using
apply(this, arguments) guarantees that the caller won't be able to notice the difference between the original and the proxied method.
Built-in Functions:
JavaScript comes along with a useful set of built-in functions. These
methods can be used to manipulate Strings, Numbers and Dates.
Following are important JavaScript functions:
Method |
Description |
charAt() |
Returns the character at the specified index. |
concat() |
Combines the text of two strings and returns a new string. |
forEach() |
Calls a function for each element in the array. |
indexOf() |
Returns the index within the calling String object of the first occurrence of the specified value, or -1 if not found. |
length() |
Returns the length of the string. |
pop() |
Removes the last element from an array and returns that element. |
push() |
Adds one or more elements to the end of an array and returns the new length of the array. |
reverse() |
Reverses the order of the elements of an array -- the first becomes the last, and the last becomes the first. |
sort() |
Sorts the elements of an array. |
substr() |
Returns the characters in a string beginning at the specified location through the specified number of characters. |
toLowerCase() |
Returns the calling string value converted to lower case. |
toString() |
Returns the string representation of the number's value. |
toUpperCase() |
Returns the calling string value converted to uppercase. |
The Document Object Model:
The Document Object Model is a tree structure of various elements of HTML as follows:
<html>
<head>
<title>the title</title>
</head>
<body>
<div>
<p>This is a paragraph.</p>
<p>This is second paragraph.</p>
<p>This is third paragraph.</p>
</div>
</body>
</html>
|
Following are the important points about the above tree structure:
-
The <html> is the ancestor of all the other elements; in
other words, all the other elements are descendants of <html>.
-
The <head> and <body> elements are not only descendants, but children of <html>, as well.
-
Likewise, in addition to being the ancestor of <head> and <body>, <html> is also their parent.
-
The <p> elements are children (and descendants) of
<div>, descendants of <body> and <html>, and siblings
of each other <p> elements.