我用道格拉斯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;
};
我用它爲每個對象我的原型,而是因爲我用它了這麼多,我在尋找磨練下來的最好的.. ..我會喜歡的想法和建議...