AngularJS:多个工厂实例任何原型继承
AngularJS: multiple Factory Instances any prototypical inheritance
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
相关文章:
- 函数参数中的数据与指定变量之间的任何性能差异
- 有没有任何方法可以将控制器从文件加载到ui路由器$stateProvider中
- jQuery中是否内置了任何字符串格式化函数
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 使用“;这个“;JavaScript原型方法中的关键字
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 有任何可能将facebook实时信使整合到一个网站中
- 是否有任何方法可以使用jQuery替换在数组中定义值的文本
- AJAX:$_GET不返回任何值
- 引用类变量中的原型方法
- 如何从对象的原型方法访问JavaScript对象属性
- 在同一个服务工作者中处理service-worker.js有任何影响吗
- 将事件处理程序绑定到任何可能的事件
- 有没有任何情况下,一个方法不应该是原型方法
- AngularJS:多个工厂实例任何原型继承
- 为什么任何对象原型都不用作 forEach 回调
- 如果修改原型,是否有任何不良副作用
- 为什么重新定义函数如此重要?在任何对象实例化之前创建原型
- 我在JavaScript中做了一些错误的原型,任何想法
- 什么'如果我们在Node.js中扩展任何对象的原型,那就错了