Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

"клонирование" сложных структур (Rumata)
Author Message
Rumata
Профессионал



Joined: 17 Aug 2003
Posts: 1850
Карма: 185
   поощрить/наказать


PostPosted: Sat Oct 16, 2004 1:15 am (написано за 12 минут 47 секунд)
   Post subject: "клонирование" сложных структур
Reply with quote

функция создания (клонирования) сложных объектов
Code (JavaScript): скопировать код в буфер обмена
function clone(object)
{
    if (typeof(object) != "object") return object;
    var newObject = object.constructor();
    for (objectItem in object) {
        newObject[objectItem] = clone(object[objectItem]);
    }
    return newObject;
}
пример использования:
Code (JavaScript): скопировать код в буфер обмена
//
var a = {
    field_1: "text",
    field_2: [1, 2, 3],
    field_3: Math.PI
};

//
var b = a;

//
var c = clone(a);

//
a.field_2 = new Array();
в результате объекты a, b и c будут содержать следующее (функция дампа сложных объектов в JavaScript описана в 39 набле (www.dklab.ru/chicken/nablas/39.html)):
Code (any language): скопировать код в буфер обмена


Last edited by Rumata on Sun Nov 14, 2004 8:59 am; edited 2 times in total
Back to top
View user's profile Send private message
Ant
Сотрудник «Лаборатории»



Joined: 17 Jun 2003
Posts: 6840
Карма: 131
   поощрить/наказать


PostPosted: Sun Oct 31, 2004 11:38 pm (спустя 15 дней 22 часа 23 минуты)
   Post subject:
Reply with quote


М

Ветка выделена в отдельную тему «"клонирование" сложных структур (обсуждение)»,
расположенную в форуме Разное :: JavaScript (01 Ноября 2004, 00:38).
Back to top
View user's profile Send private message Send e-mail
Ant
Сотрудник «Лаборатории»



Joined: 17 Jun 2003
Posts: 6840
Карма: 131
   поощрить/наказать


PostPosted: Sun Oct 31, 2004 11:39 pm (спустя 47 секунд; написано за 21 секунду)
   Post subject:
Reply with quote


М

Обсуждение здесь: "клонирование" сложных структур (обсуждение) (forum.dklab.ru/js/other/QuotKlonirovanieQuotSlognihStrukturObsugdenie.html).
Back to top
View user's profile Send private message Send e-mail
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 268
   поощрить/наказать

Location: Питер

PostPosted: Fri Nov 05, 2004 12:33 pm (спустя 4 дня 12 часов 53 минуты; написано за 23 секунды)
   Post subject:
Reply with quote

Всё-таки добавлю я сюда свой вариант. 8*)
Code (JavaScript): скопировать код в буфер обмена
Object.prototype.clone = function(obj) {
    if (obj === undefined)
    obj = this;   
    if (typeof(obj) != "object") return obj;
    var newObject = new obj.constructor();
    for (objectItem in obj) newObject[objectItem] = obj.clone(obj[objectItem]);
    return newObject;
}
Упрощено по совету Rumata
Back to top
View user's profile Send private message
Rumata
Профессионал



Joined: 17 Aug 2003
Posts: 1850
Карма: 185
   поощрить/наказать


PostPosted: Sun Nov 14, 2004 8:59 am (спустя 8 дней 20 часов 26 минут; написано за 33 секунды)
   Post subject:
Reply with quote

первый пост упрощен. функция чуть проще без потери функциональности, заложенной в нее
Back to top
View user's profile Send private message
Rumata
Профессионал



Joined: 17 Aug 2003
Posts: 1850
Карма: 185
   поощрить/наказать


PostPosted: Mon Feb 18, 2008 1:24 pm (спустя 3 года 3 месяца 4 дня 4 часа 25 минут)
   Post subject:
Reply with quote


М

Ветка выделена в отдельную тему «Частные способы клонирования»,
расположенную в форуме Разное :: JavaScript (Пн, 18 Февраля 2008, 13:24).
Back to top
View user's profile Send private message
Guest






Карма: 388
   поощрить/наказать


PostPosted: Wed Aug 27, 2008 4:21 pm (спустя 6 месяцев 9 дней 2 часа 57 минут; написано за 26 секунд)
   Post subject:
Reply with quote

Rumata wrote:
первый пост упрощен. функция чуть проще без потери функциональности, заложенной в нее
спасибо! в итоге она не работает, поскольку object.constructor().....
Back to top
Bear
Guest





Карма: 388
   поощрить/наказать


PostPosted: Fri Sep 04, 2009 1:23 am (спустя 1 год 7 дней 9 часов 2 минуты; написано за 2 минуты 34 секунды)
   Post subject: Prototypejs[.]org
Reply with quote

Используя библиотеку PROTOTYPEJS.org:
Code (JavaScript): скопировать код в буфер обмена
Object.aclone=function(object)
{   
     var result = {};
     var keys   = Object.keys(object);
     
     for (var i = 0; i < keys.size(); i++)
         if (typeof(object[keys[i]])=='object')
            result[keys[i]]=Object.aclone(object[keys[i]]);
        else
            result[keys[i]]=object[keys[i]];
     return result;
}
Back to top
Александр Михалицын
Модератор



Joined: 23 May 2008
Posts: 1299
Карма: 83
   поощрить/наказать


PostPosted: Fri Sep 04, 2009 4:50 am (спустя 3 часа 26 минут; написано за 43 секунды)
   Post subject:
Reply with quote

Bear,

М

У нас есть подсветка кода -- код должен быть в специальных тегах.
Предыдущее сообщение отредактировано.
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML