我有一个JavaScript构造是这样的:将对象作为参数传递给构造函数并将其属性复制到新对象?
function Box(obj) {
this.obj = obj;
}
,我想传递一个对象作为像这样的参数:
var box = new Box({prop1: "a", prop2: "b", prop3: "c"})
,并给了我这样的事情:
box.obj.prop1
box.obj.prop2
box.obj.prop3
但我希望属性可以直接在对象上:
box.prop1
box.prop2
box.prop3
我知道我可以做这样的事情:
function Box(obj) {
this.prop1 = obj.prop1;
this.prop2 = obj.prop2;
this.prop3 = obj.prop3;
}
但是,这并不是一件好事,因为那么我的构造函数具有对象参数的属性的名称之前,“知道”。我希望能够传递不同的对象作为参数,并直接将它们的属性作为由构造函数创建的新自定义对象的属性,所以我得到box.propX
而不是box.obj.propX
。希望我自己清楚,也许我正在测量一些非常明显的东西,但我是一个新手,所以请你需要你的帮助!
在此先感谢。
一件事注意两个解决方案都没有做一个_deep copy_。取决于你的_actual_实现有潜在的问题。例如,如果不是匿名传递你的对象,你可以创建一个变量`obj = {prop1:...,propDanger:{a:1,b:2}}`并将其传递给你的构造函数`var box = new Box(obj )`,之后编辑为`obj.propDanger.a`也会改变`box.propDanger.a`。 – 2011-01-20 05:12:14
@Brett好点。很少有问题,但一个好的想法是知道的,所以当它发生时你不会感到惊讶。 – Hemlock 2011-01-20 13:19:41