Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.02.2010, 20:12
Кандидат Javascript-наук
Отправить личное сообщение для Casufi Посмотреть профиль Найти все сообщения от Casufi
 
Регистрация: 05.02.2010
Сообщений: 109

Как записать в массив новый объек а не ссылку на исходный объект
Поясню на примере:
Вот как я делаю

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}
Ответить с цитированием
  #2 (permalink)  
Старый 06.02.2010, 20:26
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

заново создавайте объект
Ответить с цитированием
  #3 (permalink)  
Старый 06.02.2010, 20:34
Кандидат Javascript-наук
Отправить личное сообщение для Casufi Посмотреть профиль Найти все сообщения от Casufi
 
Регистрация: 05.02.2010
Сообщений: 109

мне нужно в новый объект перетянуть данные, которые задавал для DefaultColModel
Ответить с цитированием
  #4 (permalink)  
Старый 06.02.2010, 20:37
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

копируйте эти свойства)
Ответить с цитированием
  #5 (permalink)  
Старый 06.02.2010, 20:46
Кандидат Javascript-наук
Отправить личное сообщение для Casufi Посмотреть профиль Найти все сообщения от Casufi
 
Регистрация: 05.02.2010
Сообщений: 109

Я сейчас сделал таким образом
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);


Судя по результату не правильно.
Можно какимто образом скопировать все элементы старого массива в новый , есл мы заранее не знаем ни их количесиво ни их имена.
Ответить с цитированием
  #6 (permalink)  
Старый 06.02.2010, 20:51
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

Casufi, создайте конструктор, дефолтные свойства пропишите в прототипе, специфичные для инстансов - в конструкторе:

function ColModel(data) {
  this.name = data.name;
  // и т.д.
}

// дефолтные свойства (будут унаследованы из прототипа всеми инстансами)
ColModel.prototype.editable = true;

colDaysModels.push(new ColModel({name: 'foo'}));
colDaysModels.push(new ColModel({name: 'bar'}));
__________________
Тонкости ECMAScript
Ответить с цитированием
  #7 (permalink)  
Старый 06.02.2010, 20:52
Аватар для subzey
Пионэр
Отправить личное сообщение для subzey Посмотреть профиль Найти все сообщения от subzey
 
Регистрация: 16.11.2009
Сообщений: 1,322

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']);
Ответить с цитированием
  #8 (permalink)  
Старый 06.02.2010, 21:00
Кандидат Javascript-наук
Отправить личное сообщение для Casufi Посмотреть профиль Найти все сообщения от Casufi
 
Регистрация: 05.02.2010
Сообщений: 109

спасибо
Ответить с цитированием
  #9 (permalink)  
Старый 07.02.2010, 22:21
Кандидат Javascript-наук
Отправить личное сообщение для Casufi Посмотреть профиль Найти все сообщения от Casufi
 
Регистрация: 05.02.2010
Сообщений: 109

Сообщение от Dmitry A. Soshnikov Посмотреть сообщение
Casufi, создайте конструктор, дефолтные свойства пропишите в прототипе, специфичные для инстансов - в конструкторе:

function ColModel(data) {
  this.name = data.name;
  // и т.д.
}

// дефолтные свойства (будут унаследованы из прототипа всеми инстансами)
ColModel.prototype.editable = true;

colDaysModels.push(new ColModel({name: 'foo'}));
colDaysModels.push(new ColModel({name: 'bar'}));
У меня работает все кроме ColModel.prototype.editable = true;
Такая конструкция не задает дефолтніе свойства.

Вот мой кусок кода
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 не определено
Ответить с цитированием
  #10 (permalink)  
Старый 07.02.2010, 22:40
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Сообщение от Casufi
this.editable = data.editable;
так вы в конструкторе создаете одноименное свойство объекта со значением undefined
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как записать id всех элементов в массив? SunYang Общие вопросы Javascript 21 06.02.2010 22:50
Подскажите как узнать существует ли объект в памяти? Yazla Общие вопросы Javascript 2 05.11.2009 20:05
как найти нужный объект? `p r o x y jQuery 2 05.05.2009 01:12
Как лучше сделать глобальный массив skyfish AJAX и COMET 4 17.02.2009 18:05