Как записать в массив новый объек а не ссылку на исходный объект
Поясню на примере:
Вот как я делаю var colDaysModels = new Array(); DefaultColModel = { align : 'left', editable : true, edittype : 'sring', sortable : false, resizable : false }; DefaultColModel['name'] = 'id'; DefaultColModel['label'] = 'id'; DefaultColModel['width'] = 25; colDaysModels.push(DefaultColModel); DefaultColModel['name'] = 'cost'; DefaultColModel['label'] = 'cost'; DefaultColModel['width'] = 100; colDaysModels.push(DefaultColModel);; В результате в массиве оказывается два элемента [{... name:cost, label:cost,width:100},{... name:cost, label:cost,width:100}] Как сделать так чтобы в массиве первым был элемент {name:id, label:id,width:25} |
заново создавайте объект
|
мне нужно в новый объект перетянуть данные, которые задавал для DefaultColModel
|
копируйте эти свойства)
|
Я сейчас сделал таким образом
colDaysNames.push('id'); colDaysNames.push('cost'); DefaultColModel['name'] = 'id'; DefaultColModel['label'] = 'id'; DefaultColModel['width'] = 25; var MyModel1 = DefaultColModel; colDaysModels.push(MyModel1); DefaultColModel['name'] = 'cost'; DefaultColModel['label'] = 'cost'; DefaultColModel['width'] = 100; var MyModel2 = DefaultColModel; colDaysModels.push(MyModel2); Судя по результату не правильно. Можно какимто образом скопировать все элементы старого массива в новый , есл мы заранее не знаем ни их количесиво ни их имена. |
Casufi, создайте конструктор, дефолтные свойства пропишите в прототипе, специфичные для инстансов - в конструкторе:
function ColModel(data) { this.name = data.name; // и т.д. } // дефолтные свойства (будут унаследованы из прототипа всеми инстансами) ColModel.prototype.editable = true; colDaysModels.push(new ColModel({name: 'foo'})); colDaysModels.push(new ColModel({name: 'bar'})); |
var a = []; a[1] = '17'; a['object'] = {}; var b = []; for (var i in a){ if (!a.hasOwnProperty(i)) continue; b[i] = a[i]; }; alert(b['object']); |
спасибо
|
Цитата:
Такая конструкция не задает дефолтніе свойства. Вот мой кусок кода function ColModel(data) { this.name = data.name; this.editable = data.editable; } ColModel.prototype.editable = true; colDaysModels.push(new ColModel({name: 'foo'})); colDaysModels.push(new ColModel({name: 'bar'}));[/JS][/quote] В конечном результате свойство editable не определено |
Цитата:
|
Часовой пояс GMT +3, время: 13:45. |