如何使JavaScript对象有效地引用自身

时间:2018-08-17 11:19:39

标签: javascript

我正在尝试创建一些对象来存储有关如何将传入对象(从json)映射到特定表示形式的信息,并且我使用的代码类似于以下内容:

LocationMap = {
    fields: {
        "name": ValueMap(),
        //"parentLocation": ModelMap(LocationMap),
    }
}

PersonMap = {
    fields: {
        "name": ValueMap(),
        "location": ModelMap(LocationMap),
    }
}

可以将MapValue和MapModel函数视为返回函数,它们对传入的值起作用以将其映射到新值。

我遇到的麻烦是注释掉的行,在这里我需要Location对象来递归引用自己,这当然是不可能的。如果这些是另一种语言的类,我认为可能会有递归引用。如何使用JavaScript完成同一件事?

我在jsfiddle上做了一个小例子。

1 个答案:

答案 0 :(得分:0)

  

如果这些是另一种语言的类,我认为可能会有递归引用

这些是对象,而不是类。您遇到的问题是您不习惯匿名类或对象文字。解决方案很简单,将它们设置为类:

$rules = [
            'information.1.color' => 'required'
        ];

如果您在不支持ES6语法的环境中运行,则可以使用老式的语法:

class LocationMap {
  constructor () {
    this.fields = {
      name: valueMap(),
      location: modelMap(this)
    };
  }
}

class PersonMap = {
  constructor () {
    this.fields = {
      name: valueMap(),
      location: modelMap(locationMap)
    };
  }
}

var locationMap = new LocationMap();
var personMap = new PersonMap();

您还可以手动构造对象:

function LocationMap () {
  this.fields = {
    name: valueMap(),
    location: modelMap(this)
  };
}

function PersonMap () {
  this.fields = {
    name: valueMap(),
    location: modelMap(locationMap)
  };
}

var locationMap = new LocationMap();
var personMap = new PersonMap();