TL;DR:
Avons-nous besoin d'usines/constructeurs de prototype OO? Peut-on faire un paradigme de l'interrupteur et de les déposer complètement?
L'Histoire:
J'ai pensé à faire le prototype de l'OO en JavaScript dernièrement, et de trouver que 99% de OO fait en JavaScript est forçage classique OO modèles en elle.
De mon point de vue sur le prototype de l'OO est qu'il implique deux choses. Un prototype statique de méthodes (et des données statiques) et une liaison de données. Nous n'avons pas besoin d'usines ou de constructeurs.
En JavaScript, ce sont des littéraux d'Objet contenant des fonctions et de l' Object.create
.
Cela signifierait que nous pouvons modéliser tout comme statique plan/prototype et une liaison de données couche d'abstraction qui est de préférence accroché directement dans un document de style de base de données. I. e. les objets sont retirés de la base de données et créé par clonage d'un prototype avec les données. Cela signifierait il n'y a pas de logique constructeur, pas d'usines, pas d' new
.
L'Exemple de code:
Un pseudo exemple serait :
var Entity = Object.create(EventEmitter, {
addComponent: {
value: function _addComponent(component) {
if (this[component.type] !== undefined) {
this.removeComponent(this[component.type]);
}
_.each(_.functions(component), (function _bind(f) {
component[f] = component[f].bind(this);
}).bind(this));
component.bindEvents();
Object.defineProperty(this, component.type, {
value: component,
configurable: true
});
this.emit("component:add", this, component);
}
},
removeComponent: {
value: function _removeComponent(component) {
component = component.type || component;
delete this[component];
this.emit("component:remove", this, component);
}
}
}
var entity = Object.create(Entity, toProperties(jsonStore.get(id)))
Le mineur explication:
Le code est détaillé parce que ES5 est détaillé. Entity
ci-dessus est un modèle/prototype. Tout objet réel avec des données pourraient être créés en utilisant Object.create(Entity, {...})
.
Les données réelles (dans ce cas, les composants) est chargé directement à partir d'un JSON magasin et injecté directement dans l' Object.create
appel. Bien sûr, un modèle similaire est appliquée à la création de composants et seules les propriétés qui passent Object.hasOwnProperty
sont stockés dans la base de données.
Lorsqu'une entité est créée pour la première fois, il a créé avec un vide {}
Les Questions:
Maintenant mes questions sont
- Open source des exemples de JS prototype OO?
- Est-ce une bonne idée?
- Est-il en ligne avec les idées et les concepts de la programmation orientée objet par prototype?
- Ne va pas à l'aide de tout les constructeurs d'usine/ fonctions me mordre dans le cul quelque part? Peut-on vraiment s'en sortir sans l'aide des constructeurs. Il y a des restrictions à l'aide de la méthodologie décrite ci-dessus où nous aurions besoin d'usines pour les surmonter.