Estoy construyendo una biblioteca con algunos métodos y tengo un método extend
y un método load
. Me gustaría que funciona de esta manera:Cambiar las funciones "this" value en JavaScript
Core.extend('name',function(message){
this.innerHTML = message;
});
Luego de ejecutar realmente esto le haría:
Core.load('name','Hey!');
Core.extend()
crea un elemento <div>
con un identificador único basado en el nombre. Quiero hacer this
== el generado <div>
.
Sé acerca de .call()
y .apply()
, obviamente, pero no cambia this
solo cambia los parámetros de devolución de llamada en extender. Aquí está el código para extender y carga:
Core.extend()
var extend = function(name,func){
name = name || '';
func = func || function(){};
if(typeof extensions[name] == 'undefined'){
extensions[name] = func;
}
else{
if(errors){
throw new Error('Core extend() error: the extension "'+name+'" already exists');
}
}
}
Core.load()
Nota esta es la línea principal: extensions[name].call(this,widgetElement,params);
var load = function(name,params,sel){
name = name || '';
params = params || '';
sel = sel || '';
if(typeof extensions[name] !== 'undefined'){
var widgetElement = document.createElement(settings.widgetWrapperElement);
widgetElement.setAttribute('id',settings.prefixOnWidgetId+name);
sel.appendChild(widgetElement);
extensions[name].call(this,widgetElement,params);
}
else{
if(errors){
throw new Error('Core load() error: the extension "'+name+'" doesn\'t exist');
}
}
}
¡SÍ! Duh! Siempre he pensado que el primer param era "qué modificar". Es decir. si hiciera '.call (widgetElement, 'duh')', entonces en mi devolución de llamada el primer param sería igual a 'duh'. Gracias :) P.S. Lo marcaré como correcto una vez que pase el tiempo ... –