我有一个对象,其中一个属性是一个数组。我想在该数组上设置一个新属性 (customProp = 0)。但是,我想在 myObject 的声明中这样做。
myObject = {
someString: "text",
someArray: ["one","two"],
/* What I've Tried */
someArray: { customProp: 0 } // Overwrites my array with a new object
someArray["customProp"]: 0 // Invalid syntax
someArray: customProp: 0 // Also invalid
}
如果我不能创建数组然后在其上设置一个属性,我可以一举完成吗(同样,保持在这个对象的范围内)?
我有另一个(小)问题:如何引用仍在声明中的属性之一。我想设置 otherProp = someString,我该怎么做?
myObject = {
someString: "text",
otherString: someString, // someString is undefined
otherString: myObject["someString"], // myObject is undefined
otherString: this["someString"] // Just... undefined
}
我可能需要将其拆分为一个单独的问题,但希望回答第一个问题的人能够知道第二个问题的答案。
最佳答案
很遗憾,您的请求都不可能。 JavaScript 中的对象文字很方便,但也有缺点,主要是您已经发现的。
当你在一个对象字面量中时,这个对象还不完全存在。 JavaScript 解释器还没有完成摄取它。所以在字面量内部,this
指向字面量之外的对象,字面量没有办法引用它自己的其他部分。
幸运的是,您只需在字面声明之后执行这两项操作即可。
myObject = {
someString: 'text',
someArray: ['one', 'two']
};
myObject.someArray.customProp = 0;
myObject.otherString = myObject.someString;
或者,如果您愿意,您可以将所有这些包装在一个构造函数中,并使用 new
创建您的对象。
function MyObject() {
this.someArray = ['one', 'two'];
this.someArray.otherProp = 0;
this.otherString = this.someString = 'text';
}
var myObject = new MyObject();
关于javascript - 如何在创建对象时设置属性的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8095741/