JavaScript将属性附加到对象[重复]
Posted
技术标签:
【中文标题】JavaScript将属性附加到对象[重复]【英文标题】:JavaScript append property to object [duplicate] 【发布时间】:2015-11-24 22:22:57 【问题描述】:我可能忽略了最简单的解决方案,但我已经尝试了任何我能想出或在互联网上找到的方法。
我正在尝试向我的输出中需要的 JSON 对象添加一个属性。但是无论我尝试添加该属性,它都不会出现在我的对象中。我验证了“doc”变量是一个实际的对象。
没有控制台错误。 Console.log() 显示 'doc' 对象的内容,仅此而已。
有人知道怎么回事吗?
Blog.findOne('slug': req.params.slug, function(err, doc)
if (!err)
if(_.isEmpty(doc)) res.status(404).json( response: "Nothing found here." ); else
var blogPost = doc;
blogPost.someProperty = 'test';
console.log(blogPost); // doesn't contain new property
res.status(200).json( response: blogPost );
else throw err;
);
blogPost/doc 的输出
"response":
"_id": "55e31854823389ec1f5506fc",
"title": "A sample post.",
"slug": "a-sample-post2",
"body": "Hello world. This is a sample post. \n\nThis should be a new paragraph.",
"__v": 0,
"date": "2015-08-30T14:51:00.836Z"
像这样在浏览器中进行的简单测试确实有效。所以我真的很困惑为什么它在我的 NodeJS 应用程序中不起作用。与回调/异步有关吗?
var test = ;
test.prop = "test";
console.log(test);
Object prop: "test"
【问题讨论】:
任何控制台错误?它是否包含任何属性? @Amit 没有控制台错误,是的,它包含原始“文档”包含的内容,但仅此而已。 我想知道对象的内部[[Extensible]]属性是否设置为false @MatthewVita - 那是我的下一个方向...... :-)。它可能是。杰西,用一个新的简单对象包装你的doc
,并在那里设置属性:var blogPost = doc: doc, someProperty = 'test';
@MatthewVita Object.isExtensible(blogPost) = true (对于 doc)我将发布文档的输出,第二!
【参考方案1】:
如果你想得到object
的结果,你应该使用lean
函数。
您甚至可以重新格式化您的代码以消除缩进级别。
Blog.findOne('slug': req.params.slug).lean().exec(function(err, doc)
if (err)
throw err;
if(_.isEmpty(doc))
res.status(404).json( response: "Nothing found here." );
return;
// else is not required
var blogPost = doc;
blogPost.someProperty = 'test';
res.status(200).json( response: blogPost );
);
【讨论】:
感谢代码优化!下次应该多想想! 我总是尽量避免嵌套。使其更具可读性;)以上是关于JavaScript将属性附加到对象[重复]的主要内容,如果未能解决你的问题,请参考以下文章
将动态加载的 javascript 事件处理程序附加到动态加载的 HTML [重复]