JavaScript Code Example
execute-js is a good Firefox add-on that make you execute and test your JavaScript code.
How to add method to Built-in classes
String.prototype.endsWith = function(c) {
return (c == this.charAt(this.length-1))
}
Using Object Properties as Arguments
This would allow arguments to be passed as name/value pairs in any order.
function easycopy(args) {
arraycopy(args.from,
args.from_start || 0, // Note default value provided
args.to, args.to_start || 0, args.length);
}
easycopy({from: a, to: b, length: 4});
How to simulate class in javascript?
function Rectangle(w, h) {
this.width = w; this.height = h;
}
Rectangle.UNIT = new Rectangle(1,1); // public static property
Rectangle.prototype.area = function( ) {
with(this) {return width*height;}
}
Rectangle.prototype.toString = function( ) {
return "(" + this.width + "," + this.height + ") ";
}
Private Members
function Rectangle(w, h) {
var width = w;
var height = h;
this.area = function( ) {
return width*height;
}
}
Public static method
Rectangle.getType = function () { return "Rectangle" }; Rectangle.prototype.getType = Rectangle.getType;
This will have the static methods working with an instance.
How to define subclass
function PositionedRectangle(x, y, w, h) {
Rectangle.call(this, w, h); // call superclass constructor
this.x = x;
this.y = y;
}
PositionedRectangle.prototype = new Rectangle( );
delete PositionedRectangle.prototype.width;
delete PositionedRectangle.prototype.height;
PositionedRectangle.prototype.constructor = PositionedRectangle;
PositionedRectangle.prototype.contains = function(x,y) {
return (x > this.x && x < this.x + this.width &&
y > this.y && y < this.y + this.height);
}
// demonstrate how to call overridden methods
PositionedRectangle.prototype.toString = function( ) {
return "(" + this.x + "," + this.y + ") " +
Rectangle.prototype.toString.apply(this);
}
Determining Object type
typeof is useful primarily for distinguishing primitive types from objects.
function getType(x) {
if (x == null) return "null";
var t = typeof x;
if (t != "object") return t;
var c = Object.prototype.toString.apply(x); // Returns "[object class]"
c = c.substring(8, c.length-1); // Strip off "[object" and "]"
if (c != "Object") return c;
// If we get here, c is "Object". Check to see if
// the value x is really just a generic object.
if (x.constructor == Object) return c; // Okay the type really is "Object"
// For user-defined classes, look for a string-valued property named
// classname, that is inherited from the object's prototype
if ("classname" in x.constructor.prototype && // inherits classname
typeof x.constructor.prototype.classname == "string") // its a string
return x.constructor.prototype.classname;
// If we really can't figure it out, say so.
return "
}
Design pattern
Singleton
Instance in a Closure
function Universe() {
var instance = this;
// the rewritten constrictor is executed after the first time
Universe = function () {
return instance;
};
}
Use Static Property
function Universe() {
if (typeof Universe.instance === "object") {
return Universe.instance;
}
Universe.instance = this;
}
Javascript Basic
Comment: //, /* */
Creating Object
var person = new Object();
person.name = "Nicholas";
person.sayName = function(){alert(this.name);};
Array
var a = new Array( );
var a = new Array(1.2, "JavaScript", true, { x:1, y:3 });
var a = [1.2, "JavaScript", true];
a. push({ x:1, y:3 });
Function
Function Literals(lambda function)
var square = function(x) { return x*x; }
var square = new Function("x", "return x*x;"); // not recommended
var f = function fact(x) { if (x <= 1) return 1; else return x*fact(x-1); };
Named function expressions
[1,2,3,4,5].map(function factorial(n) {
return (!(n>1))? 1 : factorial(n-1)*n;
});
Optional Arguments
function f(o, /* optional */ a) {
a = a || []; // or if (!a) a = [];
}
Date
Format to yyyy-MM-dd:
var date = new Date();
var dateStr = date.getFullYear() + "-" + (date.getMonth()+1) + "-" + date.getDate();
Note: January is 0, February is 1, and so on.
var date = Date.parse("Jul 8, 2005");
Note: it returnes a number, not a Date object.
date = new Date(date);
Map
var Map = {"one": 1, "two": "two","three": 3.0};
Resource