我刚刚开始学习Angular JS Framework,我得到了一些非常奇怪的东西

时间:2017-12-20 06:29:28

标签: javascript angularjs

的Singleton

单例是一种特殊的类,只能实例化一次, 根据angularJs文件,服务和工厂是Singleton。

因此,如果我们像这样定义app.service('b', fn)

根据文件,Angular JS将服务称为

cache.b = new fn();所以b的存储值来自新的fn。

所以我可以理解angular create instance本身,所以我们不能再创建新实例,所以service是singleton。

但是当像这样定义app.factory(‘a’, fn)时,存储的值来自运行fn。

Angular call cache.a = fn();

所以没有'新'或oops的概念。那么这里有什么实例化的对象概念以及工厂如何单独使用?因为单例是一种特殊的类,只能实例化一次。

如果回答将会感激。

1 个答案:

答案 0 :(得分:0)

你是对的,angular会使用

实例化工厂
cache.a = fn();

但在此代码之前,它会检查缓存的变量是否不是对象。

因此,完整的代码可能如下

if (\\Check whether cache.a is not an object){
    cache.a = fn();
}

在工厂中,实例化一个类并返回该对象,angularjs调用工厂函数并将返回的值缓存到某处。当你每次尝试在某处注入工厂时,它会检查缓存变量是否不是对象,如果angularjs发现变量不是对象,它会调用工厂函数。