【问题标题】:I just started to learn Angular JS Framework and I get something extremely weird我刚开始学习 Angular JS 框架,我得到了一些非常奇怪的东西
【发布时间】:2017-12-20 06:29:28
【问题描述】:

单例

单例是一种特殊的类,它只能被实例化一次, 根据 angularJs 文档,Service 和 Factory 是 Singleton。

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

根据文档 Angular JS 调用服务,如

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

所以我可以理解角度创建实例本身,所以我们不能再次创建新实例,所以服务是单例的。

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

角度调用cache.a = fn();

所以没有“新”或糟糕的概念。那么实例化的对象概念在哪里,工厂也是单例的呢?因为单例是一种特殊的类,只能实例化一次。

如果回答将不胜感激。

【问题讨论】:

    标签: javascript angularjs


    【解决方案1】:

    你是对的,Angular 确实使用

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

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

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

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

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

    【讨论】:

    • 啊!这很好@Shridhar Sharma。 “当你每次尝试在某个地方注入工厂时,它会检查缓存的变量是否不是对象,如果 angularjs 发现变量不是对象,它就会调用工厂函数。”现在我可以理解了。非常感谢。
    猜你喜欢
    • 2011-01-12
    • 1970-01-01
    • 2023-01-20
    • 1970-01-01
    • 1970-01-01
    • 2010-10-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-20
    相关资源
    最近更新 更多