AngularJS:多个工厂实例任何原型继承

AngularJS: multiple Factory Instances any prototypical inheritance

本文关键字:任何 原型 继承 实例 工厂 AngularJS      更新时间:2024-02-29

Plunker(可能在没有我下面描述的情况下解释了这个问题)

我在我的Angular应用程序中有以下结构(另请参阅Angular Services以获取参考):

我使用一个工厂BaseService,它实现了几个功能。我在BaseService.prototype上定义了这些函数,以便稍后公开(也可以参考上面的链接)。

私有变量是使用var关键字声明的。

该工厂由多个服务安装,其中每个服务为初始化提供自己的值。然而,工厂仍然是一个单例,所以第二次初始化时会覆盖第一个服务使用的私有变量。

是否有防止这种情况发生的最佳实践

如果没有-你能建议一个解决方案吗(即使它需要删除私有变量)

您应该使用this而不是全局变量updated plunkr。

您可以保留一个静态私有变量,该变量包含每个工厂实例的私有数据。当工厂被实例化时,它的实例被分配了一个唯一的id(也是一个静态私有变量),而这个唯一的id也是数据数组的键。

  var privateVars = {};   // has contained private vars for each instance
  var baseServiceId=0;    // unique id assigned to each instance
  var BaseService = function(initval){
    this.baseServiceId = ++baseServiceId;
    privateVars[this.baseServiceId] = {"storedVal":initval};
  };
  BaseService.prototype.plusone = function(){
    pv = privateVars[this.baseServiceId].storedVal;
    privateVars[this.baseServiceId].storedVal = pv+1;
  };
  BaseService.prototype.getVal = function(){
    return privateVars[this.baseServiceId].storedVal;
  };

以下是更新后的plunkr:http://plnkr.co/edit/56oXXvl75zH4mTfAqMsd?p=preview