2013-10-24 2 views
2

У меня есть метод, форматирующий свойство date объекта message. Пользователь имеет массив messages.Невозможно переопределить свойство объекта JavaScript

user.messages[i].date = formatDate(user.messages[i].date); 

// logs the correctly formatted date 
console.log(formatDate(user.messages[i].date)); 

// logs the unformatted date 
console.log(user.messages[i].date); 



Однако, когда я это сделать, как в следующем фрагменте кода он работает.

 user.messages[i] = { 
      name: user.messages[i].name, 
      body: user.messages[i].body, 
      _id: user.messages[i]._id, 
      date: formatDate(user.messages[i].date) 
     }; 
+0

если он работает, в чем вопрос? ;) – lukaleli

+0

ваш первый блок изменяет объект, ваш второй блок _replaces_ весь объект с новым. – Alnitak

+4

Возможно, что-то вы не видите здесь. Попробуйте 'var msg = user.messages [i]; msg.date = formatDate (msg.date); console.log (msg.date); 'Невозможно, чтобы присваивание не работало, если вы не определили свойство' data' как недопустимое, используя 'Object.defineProperty'. – plalx

ответ

1

С помощью комментария от @plalx, ​​я нашел решение в этой теме:

Stubbing virtual attributes of Mongoose model

+0

Обязательно отметьте этот ответ как принятый, если он решил вашу проблему:) –

+0

Я могу сделать это через 2 дня. (ранее это невозможно) – user1772306

0

Это предположение, но вы можете добавить formatteddate: «» в модели пользователя (или аналогичный), а затем попробуйте:

user.messages[i].formatteddate = formatDate(user.messages[i].date); 

Поэтому вы не переконфигурируете его.

Смежные вопросы