apply call bind

by Alejandro M

HTML

https://fernetjs.com/2013/01/modificando-el-contexto-call-apply-y-bind/

http://fernetjs.com/2012/01/patrones-de-invocacion-de-funciones-this/

JavaScript

var obj = {
  delta: 2,
  test: function(num1, num2){
     return (num1 + num2) * this.delta;
  }
};

var resultado = obj.test(2,2);
console.log(resultado); // (2 + 2) * 2 = 8

///////////// APPLY
var cambio = {
  delta: 5
};

var resultado1 = obj.test.apply(cambio, [2,2]);
console.log(resultado1); // (2 + 2) * 5 = 20
////////////// CALL
var cambio = {
  delta: 5
};

var resultado2 = obj.test.call(cambio, 2, 2);
console.log(resultado2); // (2 + 2) * 5 = 20

////////////// BIND

var cambio = {
  delta: 5
};
var functionConCambio = obj.test.bind(cambio);
var resultado3 = functionConCambio(2, 2);
console.log(resultado3); // (2 + 2) * 5 = 20



//////////////////////////////////


var Persona = function(){ // nuestro "constructor"
    this.nombre = 'José';
}
Persona.prototype.mostrarNombre = function(){
    console.log(this.nombre); //con this accedemos al constructor
}

//con apply cambiamos el this referenciado al objeto persona por otroObjeto
var otroObjeto = {
    nombre: 'Pepe'
};

var p = new Persona();
p.mostrarNombre(); //imprime 'José'
p.mostrarNombre.apply(otroObjeto); // imprime 'Pepe'