如何在创建对象时设置属性属性

How To Set a Property's Property While Creating the Object

本文关键字:属性 设置 创建对象      更新时间:2023-09-26

我有一个对象,其中一个属性是数组。我想在这个数组上设置一个新的属性(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();

数组是基于数字的,所以

someArray["customProp"]: 0

不会工作。对于基于字符串的键,它应该是一个Javascript Object{}。然后你可以输入

someArray: {0:"one",1:"two","customProp":0},
对于你的第二个问题:我认为这是不可能的。

你可以在Array上设置属性,但是它们不会被本地函数迭代。您的备选方案是一个对象(按照建议)或一个数组,其中一个成员是对象:

["one", "two", {customProp: 0}]