## Шаблон вызова функции
```
var func = function(a,b){
console.log( this ); // вернет window
return a + b;
}
console.log(func(1,3));
```
## Шаблон вызова метода
```
var MYAPP = {
func: function (a, b) { // публичный метод
console.log( this );
return a + b;
}
};
console.log( MYAPP.func(1,3));
```
## Паттерн модуля
Чтобы сделать приватные методы используем паттерн модуля
```
var MYAPP = (function(){
// Шаблон вызова функции, получаем приватный метод
var prvFunc = function (){ // приватный метод
console.log("Private method");
};
// Шаблон вызова метода
return {
func: function (a, b) { // публичный метод
// Шаблон вызова функции в методе
var that = this; // Кэшируем иначе функция this воспримет как window
var helperFunc = function(c,d){ // приватная функция
that.multiply = c * d;
}
helperFunc(a,b);
return a + b;
},
funcPublic: prvFunc // Вызваем приватный метод
};
})();
console.log(MYAPP.func(2,3));
console.log(MYAPP);
```
## Шаблон вызова метода Apply
```
// В функции имеет доступ ко всем методам объекта контекст которого мы передали
var add = function(a,b){
console.log( this ); // вернет window
return a + b;
}
//два парметра
// 1 - контекст, если null то глобально
// 2 - массив аргументов
var arr = [3,5];
var sum1 = add.apply(null, arr); // глобальный контекст
console.log(sum1);
var sum2 = add.apply(MYAPP, arr); // контекст MYAPP
console.log(sum2);
```
## Шаблон вызова конструктора
```
var Man = function( name ){
this.name = name;
this.canSpeak = true;
this.sayHello = function (){
return "Hi! I'm " + name;
}
};
var vasya = new Man("Вася");
console.log(vasya);
// Функция конструктор в объекте
var MyApp = {
Man: function( name ){
this.name = name;
this.canSpeak = true;
this.sayHello = function (){
return "Hi! I'm " + name;
}
}
};
var dima = new MyApp.man("Дима");
console.log(dima);
```