我想用早期创建的对象作为原型来制作对象。这样我就可以在不修改现有对象的情况下添加它们。
与早期创建的对象交互的方法(因此使用那些属性并可能改变它们)也可以应用于新派生的对象。
我认为这可以通过以下代码完成,但它不会......
objs = [];
for (var i = 0; i < 5; i++) {
objs.push({
index: i
});
}
for (var i = 0; i < 5; i++) {
var newObj = {};
newObj.prototype = objs[i];
alert(newObj.index);
}
答案 0 :(得分:1)
当您使用构造函数创建对象的实例时,原型开始起作用。为了让您的方法起作用,您可以这样做:
for (var objI in objs) {
var obj = objs[objI];
var newObj = function() {};
newObj.prototype = obj;
newObj = new newObj();
console.log(newObj.i);
}
http://jsfiddle.net/q5bu25L1/3/
或者你可以使用Object.create()
,它完成了几乎相同的事情。
请注意,如果父对象本身包含对象,则这些方法都不能完全阻止父对象的内容被修改。例如:
var a = { n: 8, myObj: { i: 7 }};
var b = Object.create(a);
b.n = 10;
console.log(a.n); // still 8
console.log(b.n); // 10
b.myObj.i = 15;
console.log(a.myObj.i); // changed to 15!
console.log(b.myObj.i); // 15
答案 1 :(得分:1)
使用原生Object.create()
ECMA5规范
look at the full support comparison
objs = [];
for (var i = 0; i < 5; i++) {
objs.push({
index: i
});
}
for (var i = 0; i < 5; i++) {
var newObj = Object.create(objs[i]);
alert(newObj.index);
}