Помогите с объектами
function a(arg){ /*arg.value += 2; return arg;*/ } var c = { name: 'Название 1', value: 2 }; var b = a(c); console.log(c); Помогите решить проблему. Функция a() должна создать новый объект такой же структуры как аргумент и в этом новом объекте приплюсовать 2. |
Надо функцию конструктор писать. В JS же копирование объектов по ссылке.
<script> var c = { name: 'Название 1', value: 2 }; b = c; b.value = 5; alert(c.value); </script> |
Типо такого.
<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,
клон обьекта обьекта нужен в функции a |
destus,
маловато будет - но по сути уже верно :) |
Цитата:
|
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]); |
Цитата:
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 |
рони,
:blink: :lol: |
destus,
количество свойств неизвестно, поэтому, и даже ТС предпочёл костыль только чтоб не перечислять все. |
Часовой пояс GMT +3, время: 14:48. |