首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >初始化JavaScript对象及其属性数组的好方法?

初始化JavaScript对象及其属性数组的好方法?
EN

Stack Overflow用户
提问于 2012-10-08 07:44:44
回答 4查看 15.2K关注 0票数 17

我知道我可以像这样初始化一个JS对象数组:

代码语言:javascript
复制
var things = [
  {
    prop1: 'foo',
    prop2: 'bar'
  },
  {
    prop1: 'foo',
    prop2: 'bar'
  }
];

我想我会将这些类型称为“匿名”类型(对不起,我使用的是C#/.NET语言)。

如果我想让它们具有相同的原型,该怎么办?所以我定义了一个构造函数:

代码语言:javascript
复制
var Thing = function Thing() {
};

Thing.prototype.prop1 = 'default value';
Thing.prototype.prop2 = 'default value';

现在我希望我的原始代码中的两个项目都是Things,有没有好的方法呢?

如果让我猜,我可能会说这样的话:

代码语言:javascript
复制
var things = [
  new Thing() {
    prop1: 'foo',
    prop2: 'bar'
  },
  new Thing() {
    prop1: 'foo',
    prop2: 'bar'
  }
];

这基本上是C#对象初始化器语法。我想要避免的是:

代码语言:javascript
复制
var thing1 = new Thing();
thing1.prop1 = 'foo';
thing1.prop2 = 'bar';
var thing2 = new Thing();
thing2.prop1 = 'foo';
thing2.prop2 = 'bar';
var things = [thing1, thing2];

编辑:

我还应该注意到,我的原型还包含一些共享的函数。实际上,我的数组嵌套了3个深度,所以它更像这样:

代码语言:javascript
复制
{
   [
    { 
      [
        {},
        {}
      ]
    },
    {
      [
        {},
        {}
      ]
    }
  ]
}

这就是为什么我希望像这样内联所有的东西,而不是逐行设置每个属性。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-10-08 07:52:11

代码语言:javascript
复制
var Thing = function(params) {
  this.prop1 = params.prop1;
  this.prop2 = params.prop2;
};

var things = [
  new Thing({
    prop1: 'foo',
    prop2: 'bar'
  }),
  new Thing({
    prop1: 'foo',
    prop2: 'bar'
  }),
];
票数 13
EN

Stack Overflow用户

发布于 2012-10-08 07:49:34

你没有使用你的“构造函数”。最好在构造函数中初始化值:

代码语言:javascript
复制
var Thing = function Thing(prop1, prop2) {
    this.prop1 = prop1;
    this.prop2 = prop2;
};

然后执行以下操作:

代码语言:javascript
复制
var thing1 = new Thing("foo", "bar");
var thing2 = new Thing("foo", "bar");
票数 11
EN

Stack Overflow用户

发布于 2012-10-08 08:15:36

在这种情况下,我向对象添加了一个"config“方法:

代码语言:javascript
复制
function Thing() {
}
Thing.prototype.prop1 = 'foo';
Thing.prototype.prop2 = 'bar';
Thing.prototype.config = function(data) {
    for (var i in data)
        if (data.hasOwnProperty(i))
            this[i] = data[i];
}

var array = [
    new Thing().config({
        prop1: 'foobar',
        prop2: 'barfoo'
    })
];
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12773812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档