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

标签 javascript object properties object-notation

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

相关文章:

python - 从子类中的属性中删除属性(getter/setter)

c# - 如何在 ISO C++ 中定义或实现 C# 属性?

javascript - 滚动位置等于 div 内容高度时的 jQuery 警报

javascript - Google Closure 中是否有 parseInt() 的等价物?

javascript - jQuery 在 Dreamweaver 中工作但在浏览器中不工作

class - 从 VBA 函数返回新类对象的 "right"方法是什么?

JavaScript.无法从数组中选择元素

javascript - 检查 JSON 对象中是否存在日期

java - 在同一类的实例之间创建连接

objective-c - AppDelegate 未找到 ViewController 的声明和合成属性