我發佈這個,希望有人可能已經處理了類似的問題。在JavaScript中管理對象構造參數
我使用的是JavaScript對象封裝PARAMATERS在我的代碼並初始化更大的物體,就像這樣:
function MyObject(setup)
{
this.mysetup = setup;
if(typeof this.mysetup == "undefined") { this.mysetup = {} }
if(typeof this.mysetup.stringParameter == "undefined")
{
this.mysetup.stringParameter="string default value"
}
if(typeof this.mysetup.objParameter == "undefined")
{
this.mysetup.objParameter == {}
}
else
{
if(typeof this.mysetup.objParameter.member1 == "undefined")
{
this.mysetup.objParameter.member1 = "member1 default value"
}
}
// ...and so on
}
這樣我可以確保並非每一個參數需要在設置,仍然MyObject可以訴諸缺省值的缺省值。
但是,這是一個單調乏味的事情,很容易出錯。所以,我想我會嘗試的,檢查針對setupPrototype安裝的解決方案:
function MyObject(setup)
{
this.setupPrototype = {
stringParameter : "string default value",
objectParameter : { member1 : "member default value"}
}
}
,並嘗試以比較this.setupPrototype設置。 我爲了這個目的放在一起的功能看起來像
parseSetup = function (obj, objPrototype)
{
var returnedObj = {};
var hasMembers = false;
if(typeof obj=="undefined")
{
returnedObj = objPrototype;
return returnedObj;
}
for(member in objPrototype)
{
hasMembers = true;
//if prototype member is not part of initialization object
if (typeof obj[member]=="undefined")
{
returnedObj[member] = objPrototype[member];
}
else
{
if(objPrototype[member] instanceof Object)
{
if(objPrototype[member] instanceof Array)
{
returnedObj[member]=[];
for(var i=0; i<objPrototype[member].length; i++)
{
returnedObj[member].push(parseSetup(obj[member][i], objPrototype[member][i]))
}
}
else{
returnedObj[member] = parseSetup(obj[member], objPrototype[member])
}
}
else
returnedObj[member] = obj[member];
}
}
if(!hasMembers)
{
if (typeof obj == "undefined")
{
returnedObj = objPrototype;
}
else
returnedObj = obj;
}
return returnedObj;
}
然而這仍然沒有達到標準。 我正在辯論的另一個問題是,最初的「設置」應該保留它自己的任何初始屬性,還是隻有原型中的任何東西。而且,要求原型本身意識到設置可能包含的每個可能的值,特別是對於深嵌套對象,這將毫無意義。
所以我的問題是,你是否知道任何正確的方法來解決這個問題,並最終得到一個安裝對象,其參數缺失,可以從原型獲得默認值,但也不會失去自己的位置他們以某種方式需要保持?
非常感謝
感謝您的回答,似乎能夠完成這項工作。 – jcage 2012-03-25 14:36:06