自定义原型的一个小问题

hit1er 2013-06-11 05:02:04

var a = function(){}
a.prototype = {
a:1,
b:2,
c:{
x:1
},
d:[]
}

var b = new a;
var c = new a;

b.a = "b";
c.a = "c";

b.c.x = 3;
c.c.x = 4;


这个时候,可以 b.c 和 c.c 其实是内存指向的相同的地址,改变 b.c 或者 c.c
这两者都一起被改变了,而改变 b.a 或者 c.a 只改变当前的,也就是 new 的时候
number,string 被new了,object function array 依然没有被new,也依然是一个引用,但是我想实现 new 的时候,下面所有的对象都被new,特别是 object {},也就是改变
b.c.x 不会改变 c.c.x

通过
for(var name in xx){...}
拷贝过去当然不行,因为这样就不是实现原型了,大量创建的情况下,性能损耗非常大

有什么好办法吗

我发帖时候就没报多大希望,我知道大部分人会说一大堆道理而不是实际的解决方法,或者就是直接否定了,但我依然期盼着有一个稍微满意一点点的回复
...全文
86 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
地狱羔羊 2013-06-11
  • 打赏
  • 举报
回复
我很认真的看了5分钟描述,终于看懂楼主要表达的意思。 2L是正确答案。 原型上定义的成员都是所有实例公用的
天际的海浪 2013-06-11
  • 打赏
  • 举报
回复
成员变量不要在原型对象上定义

var a = function()
{
	this.a=1;
	this.b=2;
	this.c={x:1};
	this.d=[];
}

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧