Prateek Aher,
Thanks for reading and commenting.
shouldn't hobby1 and hobby2 be replaced by hobbies[0] and hobbies[1] respectively?
No, actually. The apply method is one step better than the call where you can pass the entire array as an argument. The number of parameters passed to the applied function would be mapped to the number of array elements passed to apply in the same order.

Another way to visualize it, think about the arguments itself. It is available to the function as local variable. See how I can retrieve with the element by element in this case.
var getName = function() {
console.log(this.name + ' likes ' + arguments[0] + ' , ' + arguments[1]);
}
var user = {
name: 'Tapas',
address: 'Bangalore'
};
var hobbies = ['Swimming', 'Blogging'];
getName.apply(user, hobbies);
Hope I was able to clarify. Please let me know.