如何使用对象模式填充数组?

时间:2014-07-13 10:54:58

标签: javascript arrays object

我有一个默认值的模式,其中一个看起来像这样:

DataStructure.prototype.modelPattern = {
    param1: 0,
    param2: 1,
    ...
    param462: 1500
};

这种模式代表了所谓的"模型"的结构。由于我需要多个模型,我需要创建更多这些模型" modelPattern"对象。它们都保存在同一个类的数组中:

DataStructure.prototype.models = [];

所以这不起作用:

this.models[rightPlace] = this.modelPattern;

...因为这只是保存了对" modelPattern"的引用。对象进入数组。

所以我需要创建" modelPattern"的新对象。并将它们保存到数组中。我已经尝试过这些东西了:

new modelPattern;
modelPattern.create();

这是我的第一个OOP javascript项目,所以我想我错过了导致我的问题的东西。我需要有模式的解决方案,因为我不想在我需要的不同方法中反复定义那么长的事情。

2 个答案:

答案 0 :(得分:1)

你应该使用函数。 e.g。

function createModelPattern(name, start, end) {
  var i, j, model = {};
  for(i = start, j = 0; i <= end; i++, j++) {
    model[name + i] = j;
  }
  return model;
}

console.log(createModelPattern("param", 1, 10));

答案 1 :(得分:1)

您了解对象prototypeinstance之间的区别吗? prototype仅在您拥有多个instances时才有用,否则您可以使用单个对象(只需确保)。 为什么不简单地将modelPattern存储在单独的原型中?它肯定更模块化......

function ModelPatternConstruct () {
  this.param1 = 0;
  this.param2 = 1;
  //etc.
}

您可以根据构造函数制作modelPatterns。他们将继承原型的价值观。最后,如果您希望通过命名键访问模型,您可能需要考虑一个对象而不是一个数组来存储它们。

DataStructure.prototype.models = {
  rightPlace: new ModelPatternConstruct(),
  leftPlace: new ModelPatternConstruct()
}
// now you can modify them like you wanted
DataStructure.prototype.models.param1 = 5;

或者如果你在构造函数中进行工作:(规范是在prototype函数中进行简单的键值赋值,并在Object.prototype.myFunction = etc...外部添加函数

function DataStructure() {
  this.models = {
    rightPlace: new ModelPatternConstruct(),
    leftPlace: new ModelPatternConstruct()
  }
  this.models.somePattern = new ModdelPatternConstruct();
}