角度工厂自我参考

时间:2017-04-24 19:31:30

标签: javascript angularjs oop

使用工厂在Angular中建立自引用模式的正确方法是什么?例如,如果我有相同类型对象的父子关系:

angular.module('app.factories')

.factory('PersonFactory', function(PersonFactory) {

  function Person(name) {
    this.name = name;

    this.mom = new PersonFactory('Frank');
    this.dad = new PersonFactory('Sue');
  }

  Person.prototype.getMom = function() {
    return this.mom;
  };

  Person.prototype.getDad = function() {
    return this.dad;
  };

  return Person;
});

这(显然)正在返回循环依赖性错误。

1 个答案:

答案 0 :(得分:3)

您无法创建在构造函数中创建自身的对象。否则你会得到一个无限循环。该对象应该将父项作为构造函数参数,或者添加setter。

function Person(name, father, mother) {
   this.name = name;
   this.father = father;
   this.mother = mother;
}

var child = new Person("Timmy", new Person("Frank"), new Person("Sue");

您可以直接在工厂声明中使用Person。它不必注射。

function Person(name, parent) {
    this.name = name;
    if(!parent) {
        this.mom = new Person("Sue", true);
    }
}

var child = new Person("Timmy");