mismo problema que ha escrito en esta pregunta: Javascript Class Inheritance
Como ya han dicho que estás perdiendo el contexto funciones. Las funciones son objetos como cualquier otra cosa en javascript.llamando al var f = document.write
obtendrá una referencia a la función, pero la función no tiene la referencia del documento que necesita.
ejemplo:
// give the window a new funciton
window.foo = function() {
console.log('FOO!);
}
// get a reference to this funciton
var fn = window.foo;
// call via reference works and outputs 'FOO!!' to the console
fn();
// attach it to your object
var myObject = {};
myObject.Foo = fn;
// call it it still works
myObject.Foo();
ahora si la función hace referencia a this
, lo anteriormente expuesto no funciona PORQUE this
dependes en el contexto de llamada. La manera de salvar el contexto en el momento es el uso de un cierre como este ...
// remember this is the window context
var fn = function (s) {
document.write(s);
}
La razón por la que funciona el código anterior es javascript mira a la función y no ve un objeto local document
por lo que camina hasta el alcance y ve el alcance externo (en este caso el objeto window
) tiene un documento y las llamadas escriben sobre eso. Efectivamente, la llamada a document.write()
es lo mismo que escribir window.document.write()
Puede que no funcione porque la función 'write' se espera que se ejecute en el contexto de un' documento' y no de la 'ventana'. – Prusse
Podría '.bind()', pero necesitaría una corrección para navegadores antiguos, y no sé cómo afectaría el rendimiento. 'var f = document.write.bind (document);' – user113716