我用道格拉斯Crockford的Object.beget,但增强它稍微:任何其他想法的原型
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;
};
这样你就可以“生出”并一举增加。甚至
var fop = Object.spawn(bar, {
a: 'fast',
b: 'prototyping'
});
在英语中,这意味着,“让我一个叫‘花花公子’与‘酒吧’为原型的新对象,但更改或添加成员‘A’和‘B’。 可以嵌套它规范原型更深层次的元素,你应该选择
var fop = Object.spawn(bar, {
a: 'fast',
b: Object.spawn(quux,{
farple: 'deep'
}),
c: 'prototyping'
});
这有助于避免在长对象名跳跃到一个对象的原型,无意像:
foo.bar.quux.peanut = 'farple';
如果QUUX为p原型的艺术而不是foo自己的对象,那么对“花生”的改变实际上会改变原型,影响foo原型对象原型化的所有对象。
但我离题...我的问题是这样的。因为你的规范本身可以是另一个对象,而且这个对象本身可以在它的新对象中有它的原型的属性 - 并且你可能需要这些属性......(至少在你决定将它用作规范之前你应该知道它们)...
我希望能够从规范的所有原型链中获取所有元素,除了原型对象本身...这会将它们压扁成新的对象。
目前我使用...
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;
};
我用它为每个对象我的原型,而是因为我用它了这么多,我在寻找磨练下来的最好的.. ..我会喜欢的想法和建议...