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'