我有一個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