mx.utils.ObjectCopy.copy()について
- 参考
- FN0604001 - ObjectCopy.copy()メソッドを多重配列対応に修正する - Flash : テクニカルノート
- http://www.fumiononaka.com/TechNotes/Flash/FN0604001.html
テストはしてない。テストしようかというところで不要になった。また、多次元配列に対応する気は無い。ちなみに、copyPropertiesAsc関数はcopyAsc関数内の関数とした方がすっきりすると思う。
/** * オブジェクトを別の新しいインスタンスに複製して返す * コピー元にArrayが含まれる場合添え字の昇順に配列内容の複製が行われる * @param inRef_obj コピー元のオブジェクト * @return 複製されたオブジェクト。引数inRef_objとは別のインスタンス */ public static function copyAsc(inRef_obj:Object) { var outResult_obj:Object = new Function(inRef_obj.__proto__.constructor)(); copyPropertiesAsc(outResult_obj, inRef_obj); return outResult_obj; } /** * オブジェクトのプロパティを別の新しいインスタンスに複製して返す * コピー元にArrayが含まれる場合添え字の昇順に配列内容の複製が行われる * @param inoutDst_obj コピー先のオブジェクト * @param inSrc_obj コピー元のオブジェクト */ public static function copyPropertiesAsc(inoutDst_obj:Object, inSrc_obj:Object) { var type_str:String; var srcElement_obj; // 型指定不可 for (var i in inSrc_obj) { srcElement_obj = inSrc_obj[i]; type_str = typeof(srcElement_obj); if (type_str != "function") { if (type_str == "object") { if (srcElement_obj instanceof Array) { var dst_arr:Array = new Array(); var src_arr:Array = srcElement_obj; for(var j:Number = 0; j < src_arr.length; j++) { if (typeof(src_arr[j]) == "object") { dst_arr[j] = copy(src_arr[j]); } else if (typeof(src_arr[j]) != "function") { dst_arr[j] = src_arr[j]; } } // for inoutDst_obj[i] = dst_arr; } else if (srcElement_obj instanceof String) { inoutDst_obj[i] = new String(srcElement_obj); } else if (srcElement_obj instanceof Number) { inoutDst_obj[i] = new Number(srcElement_obj); } else if (srcElement_obj instanceof Boolean) { inoutDst_obj[i] = new Boolean(srcElement_obj); } else { inoutDst_obj[i] = copy(srcElement_obj); } } else { inoutDst_obj[i] = srcElement_obj; } } // if not a function } // for .. in }