Помогите с объектами
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, время: 12:47. |