Как правильно клонировать объект, чтобы он оставался и при удалении исходника
Сабж...
var Obj_old={...} var New_Obj ??? |
|
Я вкурсе только про создание нового объекта и копирование в него всех свойств.
exports.copyObject = function(obj) { var copy = {}; for (var key in obj) { copy[key] = obj[key]; } return copy; }; exports.deepCopy = function (obj) { if (typeof obj != "object") { return obj; } var copy = obj.constructor(); for (var key in obj) { if (typeof obj[key] == "object") { copy[key] = this.deepCopy(obj[key]); } else { copy[key] = obj[key]; } } return copy; }; Это из https://github.com/ajaxorg/ace/blob/...ce/lib/lang.js Думаешь есть что-то поинтереснее? |
var b = {a: 123}; var a = JSON.stringify(b); a = JSON.parse(a); b = null; alert(a.a); |
рони,danik.js, Спс
Мож еще devote подскажет(или B@rmaley.e><e Cвойства исходника могут быть и приватные и вложенные ... Разбираюсь пока... Задача клонировать фреймворк |
рони, действительно, интересно. Не во всех случаях подходит коечно, но когда нужно быстро сделать копию, без всяких вспомогательных функций - самое то. В хроме работает где-то в 2 раза медленней чем клон через копирование свойств.
|
:blink: Пока работает:
var b = {a: {a: 123}}; var a = JSON.stringify(b); a = JSON.parse(a); b = null; alert(a.a.a); var b = {a: {a: {a: 333}}}; var a = JSON.stringify(b); a = JSON.parse(a); b = null; alert(a.a.a.a); var b = {a: {a: {a: alert(333)}}}; var a = JSON.stringify(b); a = JSON.parse(a); b = null; a.a.a.a; var b = {a: {a: {a: (function(){alert(333)}())}}}; var a = JSON.stringify(b); a = JSON.parse(a); b = null; a.a.a.a; |
http://jsperf.com/deep-object-copy-vs-json
Вот еще, но тут хренотень какая то. http://jsperf.com/cloning-an-object/54 Какой еще ES5 Object.clone ... |
Цитата:
|
Дзен-трансгуманист,
http://javascript.ru/tutorial/events/crossbrowser Цитата:
|
Цитата:
Начали с чистых объектов... потом вложенные, потом функции -------------------------------------------------------------- Суть в том - что брауз как то клонирует и фреймворк тоже |
Обман зрителя с псевдоклонированием фреймворка
1. Ставим скрипт библиотеки во фрейм, 2. ...якобы клонируем frame1.jQuery 3. Удаляем фрейм вместе со скриптом (можно наблюдать удаление - cпецом Запускаем любые jQuery функции (тут считываю bоdy.html() ( Заметим что фрейма нет) //Чисто коперфильд (Сам заю, что вру и где //а хочется реально! <!DOCTYPE> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" /> </head> <body> <script> function TestLibFrame() { // function Clone(a) { return a; } window.docThis = frame1.parent.document; window.$$ = Clone(frame1.jQuery); //...якобы клонируем frame1.jQuery delete frame1.jQuery;//alert(frame1.jQuery); //...удаляем объект frame1.jQuery $$("iframe[name='frame1']",docThis).remove(); //Удаляем фрейм... var str = 'Запускаем jQuery на странице без библиотеки:'; alert(str +'\n\n' + $$("html",docThis).html()); } function Funk0(aa) { var a='Cтавим javascript - библиотеку во фрейм' var iframe = aa var iframeDoc = iframe.contentWindow.document; var b = iframeDoc.createElement('div'); b.innerHTML=a;//alert(b.innerHTML) iframeDoc.body.appendChild(b); var s = iframeDoc.createElement('script'); s.setAttribute("type","text/javascript"); s.src = "http://yandex.st/jquery/1.4.4/jquery.min.js"; //s.setAttribute("onload","parent.TestLibFrame()"); s.onload = function () {setTimeout("TestLibFrame()",4000);} b.appendChild(s); } </script> <iframe name=frame1 onload="Funk0(this)"></iframe> </body> </html> |
Часовой пояс GMT +3, время: 03:23. |