La mejor forma de aprovechar los objetos es utilizar el patrón de prototipos en JavaScript. Esto significa que comparte datos con objetos, en lugar de ser mezquino y decir "¡Eso es mío!".
Este patrón está por todas partes en las bibliotecas de JavaScript. Se ve algo como esto:
var Template = {
extend: function() {
var F = function() {};
F.prototype = this.prototype;
var instance = new F();
instance.mixin.apply(instance, arguments);
return instance;
},
mixin: function (mixins) {
for (var i = 0, len = arguments.length; i < len; i++) {
for (var k in arguments[i]) if (arguments[i].hasOwnProperty(k)) {
this[k] = arguments[i][k];
}
}
return this;
}
};
Esta clase mágica compartirá datos a través de cadenas de herencia, y hacer que su modelo de objetos más simple . ¡Nada es una clase, todo es un Objeto! Esto significa entender los detalles de JavaScript, para no quedar atrapado en pegajoso pegajoso, pero bien vale la pena.
Esto significa que cuando se tiene:
var Koopa = Template.extend({
hasShell: true,
fatalFlaw: 'shell'
});
var Bowser = Koopa.extend({
fatalFlaw: 'tail'
});
Los datos almacenados se ve de la siguiente manera:
+-------------------. +---------------------. +---------.
| Bowser |->| Koopa |->| Template |
+--------------------+ +----------------------+ +----------+
|fatalFlaw => 'tail' | | hasShell => true | | mixin |
`-------------------+ | fatalFlaw => 'shell' | | extend |
`---------------------+ `---------+
Este diseño se deriva de diseño del padre Crockford prototypal inheritance. Y como Knuth dice: "¡La optimización prematura es la raíz de todo mal!"
Y ... si esto parece una respuesta fuera de tema, es intencionado. Debería hacer preguntas sobre cómo su diseño puede servir a sus necesidades. Si lo haces bien, entonces todo debería encajar. Si no piensas lo suficiente, puedes terminar con algunos efectos secundarios desagradables y un código apestoso. Hazte un favor y crea un diseño que elimine cualquier duda que tengas. ¡Los navegadores hacen cosas más complicadas y con uso intensivo de CPU en estos días que resolver el ajedrez!
Por lo tanto, mi respuesta es ... no escuchen lo que dice la gente sobre la eficiencia, o lo que es mejor (¡incluso yo!). Haz lo que más te parezca, en el diseño de tu biblioteca. En este momento, estás tratando de clavar una clavija cuadrada en un agujero redondo. Primero debe decidir cuáles son sus necesidades, y todo saldrá naturalmente después. ¡Incluso podría sorprenderte!
+10 si pudiera, esta es la mejor respuesta hasta el momento. Otro +1 para citar a Knuth. –
Muy sabio de hecho :) muy apreciado comentarios – Purefan
@Marcel: Gracias por las amables palabras. Me encuentro trotando esa cita periódicamente, es una que sigue dando. – SamStephens