Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.02.2016, 20:01
Новичок на форуме
Отправить личное сообщение для sasha-adm-in Посмотреть профиль Найти все сообщения от sasha-adm-in
 
Регистрация: 18.02.2016
Сообщений: 2

Помогите с объектами
function a(arg){
	/*arg.value += 2;
	return arg;*/	

}

var c = 
    {
        name: 'Название 1',
        value: 2
    };
    
var b = a(c);



console.log(c);

Помогите решить проблему. Функция a() должна создать новый объект такой же структуры как аргумент и в этом новом объекте приплюсовать 2.
Ответить с цитированием
  #2 (permalink)  
Старый 18.02.2016, 20:24
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

Надо функцию конструктор писать. В JS же копирование объектов по ссылке.
<script>
        var c =
    {
        name: 'Название 1',
        value: 2
    };
        b = c;
        b.value = 5;
        alert(c.value);
    </script>
Ответить с цитированием
  #3 (permalink)  
Старый 18.02.2016, 20:33
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

Типо такого.

<script>
        function Obj(name, value) {
            this.name = name;
            this.value = value;
        };
        function a(arg) {
            b = new Obj(arg.name, arg.value);
            b.value += 2;
            return b;
        }

        var c = new Obj('Название 1', 2);
        var b = a(c);
        alert(b.value);
        alert(c.value);
    </script>

Последний раз редактировалось destus, 18.02.2016 в 20:51.
Ответить с цитированием
  #4 (permalink)  
Старый 18.02.2016, 20:43
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,124

destus,
клон обьекта обьекта нужен в функции a
Ответить с цитированием
  #5 (permalink)  
Старый 18.02.2016, 20:54
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,124

destus,
маловато будет - но по сути уже верно
Ответить с цитированием
  #6 (permalink)  
Старый 18.02.2016, 20:57
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

Сообщение от рони Посмотреть сообщение
destus,
маловато будет - но по сути уже верно
В ожидании твоего решения.. Через веб воркера с индикатором процесса копирования.
Ответить с цитированием
  #7 (permalink)  
Старый 18.02.2016, 20:59
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,124

destus,
if (!Object.assign) Object.defineProperty(Object, "assign", {
    enumerable: false,
    configurable: true,
    writable: true,
    value: function(target, firstSource) {
        if (target === undefined || target === null) throw new TypeError("Cannot convert first argument to object");
        var to = Object(target);
        for (var i = 1; i < arguments.length; i++) {
            var nextSource = arguments[i];
            if (nextSource === undefined || nextSource === null) continue;
            var keysArray = Object.keys(Object(nextSource));
            for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex++) {
                var nextKey =
                    keysArray[nextIndex];
                var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);
                if (desc !== undefined && desc.enumerable) to[nextKey] = nextSource[nextKey]
            }
        }
        return to
    }
});

function a(arg) {
    var copy = Object.assign({}, arg);
    copy.value += 2;
    return copy
}
var c = {
    name: "Название 1",
    value: 2
};
var b = a(c);
alert([b.value, c.value]);
Ответить с цитированием
  #8 (permalink)  
Старый 18.02.2016, 20:59
Новичок на форуме
Отправить личное сообщение для sasha-adm-in Посмотреть профиль Найти все сообщения от sasha-adm-in
 
Регистрация: 18.02.2016
Сообщений: 2

Сообщение от destus Посмотреть сообщение
Типо такого.

<script>
        function Obj(name, value) {
            this.name = name;
            this.value = value;
        };
        function a(arg) {
            b = new Obj(arg.name, arg.value);
            b.value += 2;
            return b;
        }

        var c = new Obj('Название 1', 2);
        var b = a(c);
        alert(b.value);
        alert(c.value);
    </script>
Спасибо за ответ, но уже нашёл решение и сделал так:
function a(arg) {
    var clone = JSON.parse(JSON.stringify(arg));
    clone.value += 1;
    return clone;
}
var c = {
    name: 'Название 1',
    value: 2
};
var b = a(c);
 
console.log(c.value); // 2
console.log(b.value); // 3
Ответить с цитированием
  #9 (permalink)  
Старый 18.02.2016, 21:04
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

рони,
Ответить с цитированием
  #10 (permalink)  
Старый 18.02.2016, 21:12
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,124

destus,
количество свойств неизвестно, поэтому, и даже ТС предпочёл костыль только чтоб не перечислять все.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите дилетанту разобраться с объектами GorS Общие вопросы Javascript 3 31.07.2015 18:35
Помогите с тестированием fsb-k Работа 8 29.03.2013 11:20
Помогите пожалуйста вычислить общую сумму katalizator Общие вопросы Javascript 15 22.03.2013 16:26
Помогите! Многоуровневые вкладки! sergeeeeee Элементы интерфейса 2 02.08.2010 23:50
Помогите написать скрипт для корзины Deep Элементы интерфейса 1 19.06.2010 14:46