Allows you to apply a method of another object in the context of a different object (the calling object).
var result = objectName.methodName.apply(thisArg[, argsArray]);
thisArg determines the value of this inside fun. If thisArg is null or undefined, this will be the global object.
argsArray is an optional array that will be passed as arguments for the method.
apply is very similar to call, except for the type of arguments it supports. You can use the arguments array instead of a named set of parameters. With apply, you can use an array literal, for example, fun.apply(this, [name, value]), or an Array object, for example, fun.apply(this, new Array(name, value)).
You can also use arguments for the argArray parameter. arguments is a local variable of a function. It can be used for all unspecified arguments of the called object. Thus, you do not have to know the arguments of the called object when you use the apply method. You can use arguments to pass all the arguments to the called object. The called object is then responsible for handling the arguments.
You can assign a different this object when calling an existing function. this refers to the current object, the calling object. With apply, you can write a method once and then inherit it in another object, without having to rewrite the method for the new object.
Using apply to chain constructors
function product(name, value)
{
this.name = name;
if (value > 1000)
this.value = 999;
else
this.value = value;
}
function prod_dept(name, value, dept)
{
this.dept = dept;
product.apply(this, arguments);
}
prod_dept.prototype = new product();
How can function A call function B with the same argument list?
function b(){
}
function a(){
b.apply(null, arguments);
}
a('fred', 'Sally', 'Jo');





