Je l'ai utilisé Object.beget de Douglass Crockford, mais augmentèrent légèrement à:D'autres idées pour le prototypage
Object.spawn = function (o, spec) {
var F = function() {}, that = {}, node = {};
F.prototype = o;
that = new F();
for (node in spec) {
if (spec.hasOwnProperty(node)) {
that[node] = spec[node];
}
}
return that;
};
De cette façon, vous pouvez « enfanter » et augmenter d'un seul coup.
var fop = Object.spawn(bar, {
a: 'fast',
b: 'prototyping'
});
En anglais, cela signifie: « Fais-moi un nouvel objet appelé « FOP » avec « bar » comme son prototype, mais changer ou ajouter les membres 'a' et « b ». Vous pouvez même imbriquer la spécification de prototype éléments plus profonds, si vous choisissez
var fop = Object.spawn(bar, {
a: 'fast',
b: Object.spawn(quux,{
farple: 'deep'
}),
c: 'prototyping'
});
Cela peut aider à éviter de saut dans le prototype d'un objet sans le vouloir dans un long nom de l'objet comme:.
foo.bar.quux.peanut = 'farple';
Si quux est p l'art du prototype et non l'objet propre de foo, votre changement de 'peanut' changera réellement le protoype, affectant tous les objets prototypés par l'objet prototype de foo.
Mais je m'égare ... Ma question est la suivante. Parce que votre spécification peut elle-même être un autre objet et que cet objet pourrait lui-même avoir des propriétés de son prototype dans votre nouvel objet - et vous pouvez vouloir ces propriétés ... (au moins vous devriez en être conscient avant de l'utiliser comme spécification) ...
Je veux être en mesure de saisir tous les éléments de toutes les chaînes de prototypes de la spécification, à l'exception de l'objet prototype lui-même ... Cela les aplatirait dans le nouvel objet.
Actuellement, je suis en utilisant ...
Object.spawn = function (o, spec) {
var F = function() {}, that = {}, node = {};
F.prototype = o;
that = new F();
for (node in spec) {
that[node] = spec[node];
}
return that;
};
Je l'utilise pour chaque objet que je prototype, mais parce que je l'utilise tellement, je suis à la recherche d'affiner vers le bas au mieux possible .. .. Je voudrais des pensées et des suggestions ...