Cuando ejecuto este código:herencia JavaScript magia
function foo() {
console.log("foo");
var self = this;
this.a = function() {
return arguments.length == 0 ? self.b : (self.b = arguments[0]);
};
};
function bar() {
};
bar.prototype = new foo();
var a = new bar();
var b = new bar();
console.log(a.a());
b.a(true);
console.log(a.a());
me sale el siguiente resultado: foo, undefined, true
Lo que no entiendo es cómo el objeto devuelto por la función constructora foo
alguna manera se las arregla para asignar una nueva ubicación de memoria para b
. Esperaba totalmente que la última salida fuera true
porque solo obtengo 1 foo
de salida.
Que esto funciona es genial, pero se siente demasiado como magia.
Mi problema realmente aquí es que me gustaría configurar un orden de inicialización (o cadena). Lo que me he dado cuenta es que foo
no puede tomar ningún argumento, porque solo se llama una vez, para proporcionar una base (o una especie de plantilla).
me gustaría diseñar un esquema muy simple donde foo
tiene parámetros que tiene que ser pasado de bar
a foo
(porque bar
hereda foo
). Estoy bien con algo así como llamar al foo.apply(this, arguments)
desde bar
, pero la llamada para establecer el prototipo debe hacerse sin argumentos, lo que necesito es una forma fluida de diferenciarlos de alguna manera.
Pero realmente no quiero construir todo un servicio en torno a la creación de objetos que permiten algún tipo de herencia, la única cosa que realmente importa es la construcción de los objetos, correctamente ...
Me registro 'foo, undefined, true'. El último '' no definido 'aparece en las herramientas de desarrollo de Chrome, pero ese es solo el valor de retorno de 'console.log'. Solo tienes 3 registros de todos modos. – pimvdb
Sí, es cierto, acabo de copiar de la salida de la consola de Chrome, perdí esa ... –
¿Cuál es exactamente la pregunta? – user123444555621