Как записать в массив новый объек а не ссылку на исходный объект
Поясню на примере:
Вот как я делаю
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, время: 08:14. |