Четыре паттерна вызова функций в JavaScript

Method Invocation
«Вызов метода» представляет из себя вызов функции, принадлежащей объекту. Пример:

 var obj = {
  value: 0,
  increment: function() {
   this.value+=1;
  }
 };
 obj.increment();

Значение this будет ссылаться на объект, которому принадлежит функция.

Function Invocation
Вызов функции выполняется с помощью оператора ():

 add(2,3);

this привязывается к global object.

Constructor Invocation
Паттерн запускается путем размещения оператора new прямо перед вызовом, например:

 var Cheese = function(type) {
  cheeseType = type;
  return cheeseType;
 }
 cheddar = new Cheese("cheddar");

this в данном случае будет относиться к свежесозданному объекту.

Apply And Call Invocation
Данный паттерн использует два параметра: первый — это объект, к которому привязывается this, второй — это массив, связанный с параметрами:

 var obj = {
  data:'Hello World'
 }
 var displayData = function() {
  alert(this.data);
 }
 displayData(); //undefined
 displayData.apply(obj); //Hello World

Этот пример использует apply для привязки this к obj. В результате мы в состоянии получить значение this.data. Настоящая ценность apply заключается именно в привязывании this.

В JavaScript также существует оператор call, похожий на apply всем, за исключением того что получает не параметры, а список аргументов.