我知道我可以像这样初始化一个JS对象数组:
var things = [
{
prop1: 'foo',
prop2: 'bar'
},
{
prop1: 'foo',
prop2: 'bar'
}
];
我想我会将这些类型称为“匿名”类型(对不起,我使用的是C#/.NET语言)。
如果我想让它们具有相同的原型,该怎么办?所以我定义了一个构造函数:
var Thing = function Thing() {
};
Thing.prototype.prop1 = 'default value';
Thing.prototype.prop2 = 'default value';
现在我希望我的原始代码中的两个项目都是Thing
s,有没有好的方法呢?
如果让我猜,我可能会说这样的话:
var things = [
new Thing() {
prop1: 'foo',
prop2: 'bar'
},
new Thing() {
prop1: 'foo',
prop2: 'bar'
}
];
这基本上是C#对象初始化器语法。我想要避免的是:
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个深度,所以它更像这样:
{
[
{
[
{},
{}
]
},
{
[
{},
{}
]
}
]
}
这就是为什么我希望像这样内联所有的东西,而不是逐行设置每个属性。
发布于 2012-10-08 07:52:11
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'
}),
];
发布于 2012-10-08 07:49:34
你没有使用你的“构造函数”。最好在构造函数中初始化值:
var Thing = function Thing(prop1, prop2) {
this.prop1 = prop1;
this.prop2 = prop2;
};
然后执行以下操作:
var thing1 = new Thing("foo", "bar");
var thing2 = new Thing("foo", "bar");
发布于 2012-10-08 08:15:36
在这种情况下,我向对象添加了一个"config“方法:
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'
})
];
https://stackoverflow.com/questions/12773812
复制相似问题