【发布时间】:2010-10-18 01:37:04
【问题描述】:
当我们在属性(超类型中的数组)中有引用值时,使用 Crockford 的方法 (http://javascript.crockford.com/prototypal.html) 不起作用,因为这在所有对象中都很常见。
那么,在 Javascript 中进行对象继承的真正推荐方法是什么,它没有问题并且在视觉上更好地封装了所有对象的方法和属性?
例子:
if (typeof Object.create !== 'function') {
Object.create = function (o) {
function F() {}
F.prototype = o;
return new F();
};
}
var p1 = {name: "nick", friends : ["a1", "a2"]};
var p2 = Object.create(p1);
p2.name ="john";
p2.friends.push("andre");
alert(p1.friends);
alert(p2.friends);
alert(p1.name);
alert(p2.name);
friends 数组为 p1 和 p2 返回相同的值,而我希望它返回不同的值。
【问题讨论】:
-
很遗憾,目前我能想到的唯一解决方案是深度克隆。希望有人有更好的主意。
标签: javascript