无法覆盖JavaScript对象的属性

问题描述:

我得到了一种格式化的date属性的方法。用户有一组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);'除非您使用'Object.defineProperty'将'data'属性定义为不可配置,否则赋值不可行。 – plalx

与@plalx注释的帮助下,我发现在这个线程的解决方案:

Stubbing virtual attributes of Mongoose model

+0

请确保将此答案标记为接受,如果它解决了您的问题:) –

+0

我可能会在2天后这样做。 (早些时候这是不可能的) – user1772306

这是一个猜测,但你可以添加formatteddate:“”到你的用户模型(或类似的)然后尝试:

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

因此,您不重新配置它。