繁体   English   中英

在Javascript中定义对象的属性数组

[英]define property array of objects in Javascript

我已经初始化了一个我希望动态添加的对象。 具体来说,我想向这个对象添加对象数组。 我已经尝试了以下但都不起作用..有没有办法正确地做到这一点? 最终输出应该是object1.property1[0].value = 42object1.property1[0].writable = false

const object1 = {};

Object.defineProperty(object1, 'property1', '' );
object1.property1 = [{value: 42, writable: false}];


const object1 = {};
Object.defineProperty(object1, 'property1', [{value: 42, writable: false}] );

尝试使用描述符参数中的value属性:

 const object1 = {}; Object.defineProperty(object1, 'property1', { value: [{ value: 42, writable: false }] }); console.log(object1.property1[0].value); console.log(object1.property1[0].writable);

对象描述符必须声明如下:

{value: [{value: 42}], writable: false}

 const object1 = {}; Object.defineProperty(object1, 'property1', {value: [{value: 42}], writable: false}); console.log(object1.property1[0].value)

由于您指定要向对象添加一组对象,因此此解决方案类似于其他答案,但应演示添加具有多个元素的数组:

 const obj = {}; Object.defineProperty(obj, 'property', { value: [{ value: 42, writable: false }, { value: 55, writable: false } ] }); console.log(obj.property[0].value); console.log(obj.property[0].writable); console.log(obj.property[1].value); console.log(obj.property[1].writable);

当然,您的writable不会做任何事情,因为它将被视为另一个属性。 由于您的property是一个对象数组(例如[{...},{...}] ),您可能想要做的是迭代该数组并冻结这些对象:

obj.property.forEach(o=>Object.freeze(o))
obj.property[0].value=33;  // when frozen you won't be able to update the value

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM