【问题标题】:how to right choose javascript pattern如何正确选择javascript模式
【发布时间】:2016-02-05 23:10:48
【问题描述】:

我创建了 2 个对象:

  var Documentos = new QuadForm();
  var Cadastro = new QuadForm();

并用很多选项初始化这个对象

    Cadastro.initForm(options);
    Documentos.initForm(options2);

然后我尝试使用 getName 方法分离每个对象管理的数据,但在第二个对象之后,myObjectName 变量被覆盖。

    var QuadForm;
QuadForm = function () {
    this.getName = function () {
        // search through the global object for a name that resolves to this object
        for (var name in window)
            if (window[name] == this) {
                window[name] = this;
                window[window[name]] = window[name];
                myObjectName= name;
                break;
            }
    },
        this.initForm = function (parms) {

            this.getName()

            $.extend(this, parms);
            if (window.myState) {
                delete window.myState;
            }
            this.containerId = parms.formId;
            this.getForm(parms);
            this.workflowLabels('hide');

然后我使用 window[myObjectName].totalRecords 但当它更改为最新的对象名称时,当然无法访问数据。

我该如何管理。

【问题讨论】:

  • 你的目标是什么?您是否试图找到构造函数QuadForm 的每个实例?那么让我说你没有机会以适合所有情况的方式这样做!无论如何,很明显,您的变量已被覆盖,因为您多次覆盖它。
  • 这不可能吗?同一视图中的两个实例以及管理来自多个实例的数据的类quadform?

标签: javascript object design-patterns architecture pattern-matching


【解决方案1】:

管理多个实例不是什么大问题,但你的方法是不可能的,因为你无法真正找到所有可能的实例,而且你的代码肯定不是你期望的。

例如,您可以在包含所有实例的构造函数对象上定义一个变量,并且在某些情况下可以使用它:

var QuadForm = function (name) {
  this.name = name;

  QuadForm.instances.push(this);

  this.showAllOtherInstances = function () {
    QuadForm.instances.forEach(function (instance) {
      if (instance !== this) {
        console.log('name: ' + instance.name);
      }
    }.bind(this));
  }
}

QuadForm.instances = [];

var foo = new QuadForm('foo');
var anotherFoo = new QuadForm('foo');
var bar = new QuadForm('bar');
var aThirdFoo = new QuadForm('foo');
foo.showAllOtherInstances();
/* 
 * Output:
 *
 * name: foo
 * name: bar
 * name: foo
 */

【讨论】:

    猜你喜欢
    • 2019-03-27
    • 2018-02-18
    • 2019-11-05
    • 2022-08-18
    • 2020-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-17
    相关资源
    最近更新 更多