Ответ 1
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'
}),
];
Я знаю, что могу инициализировать массив объектов JS следующим образом:
var things = [
{
prop1: 'foo',
prop2: 'bar'
},
{
prop1: 'foo',
prop2: 'bar'
}
];
Я бы назвал эти "анонимные" типы (извините, я использую язык С#/. 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'
}
];
В основном это синтаксис инициализатора объекта С#. Я пытаюсь избежать:
var thing1 = new Thing();
thing1.prop1 = 'foo';
thing1.prop2 = 'bar';
var thing2 = new Thing();
thing2.prop1 = 'foo';
thing2.prop2 = 'bar';
var things = [thing1, thing2];
Edit:
Я также должен отметить, что мои прототипы также содержат некоторые общие функции. Также на самом деле у меня есть массивы, вложенные в 3 глубины, так что это нечто более похожее:
{
[
{
[
{},
{}
]
},
{
[
{},
{}
]
}
]
}
Вот почему я так надеялся, что просто запустил все встроенное, как это, и не устанавливая каждое свойство по строкам.
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'
}),
];
Вы не используете свой "конструктор". Его предпочтительнее инициализировать значения в вашем CONSTRUCTOR:
var Thing = function Thing(prop1, prop2) {
this.prop1 = prop1;
this.prop2 = prop2;
};
а затем выполните:
var thing1 = new Thing("foo", "bar");
var thing2 = new Thing("foo", "bar");
В этом случае я добавляю к объекту метод "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'
})
];
Может случиться, что вы тоже этого хотите избежать?
var thing1 = new Thing();
var thing2 = new Thing();
thing1.prototype = {
prop1: "foo",
prop2: "bar"
};
thing2.prototype = {
prop1: "foo",
prop2: "bar"
};
Еще одна вещь, о которой я могу думать, заключается в том, чтобы сделать конструктор самостоятельно, поэтому он позволяет что-то вроде следующего:
var things = [
new Thing({
prop1: "foo",
prop2: "bar"
}),
new Thing({
prop1: "foo",
prop2: "bar"
})
];