【问题标题】:Why are Angular.js Services created with 'new'?为什么使用“新”创建 Angular.js 服务?
【发布时间】:2015-04-16 21:28:44
【问题描述】:

根据这个问题:

angular.service vs angular.factory

服务由 Angular 使用 new 关键字创建,表示返回对象的 new 实例。

例如:

app.service('helloWorldService', function() {
    this.hello = function() {
        return "Hello World"; };
    }
);

但是,对于工厂来说,它们不是。

这意味着如果开发人员愿意,他们可以创建新实例(通过使用关键字 new)——因此,我假设它为什么称为工厂。

我的问题是:

为什么 Angular 开始创建一个新的服务实例?

我同意服务应该是单例的,它们是,但是创建返回函数的新实例有什么意义呢?对于服务来说,如果 Angular 只返回声明的函数不是更好吗——就像他们对工厂所做的那样。

这对服务不是更有意义吗?

我问的原因是因为我在抽象层上创建服务,但我不确定我是否应该真正使用服务 API 而不是工厂 API,只是因为创建声明函数的新实例似乎是有点无意义和矫枉过正=\

【问题讨论】:

  • 我想先说我是 Angular 和开发的新手。似乎该服务有意义的唯一方法是以不同的方式实例化它们,但由于您将依赖项传递给匿名函数,因此它们没有设置为轻松传递参数。我也阅读了关于 SO 的所有相关答案,我也想知道“新”的用途是什么。在实践中,我很满意使用工厂返回 new {} 以拥有一个共享对象,或者返回一个 class(){} 并自己创建实例。

标签: javascript angularjs service factories


【解决方案1】:

如果你研究这个信息量很大的链接

Informative Link on SO

And yet another link on SO

Just in case the first two SO links were missed, here is yet another

您会发现工厂、服务和提供者之间的唯一区别是运行以支持该功能的 Anguljarjs 开销代码。

在您提到的服务或工厂的情况下,服务将使用 this.property,并且可能包括它自己的函数添加原型链和正常的 JS 构造函数操作。

您也可以在工厂包装器内完成所有这些操作,但您不会使用“new”运算符在控制器/指令中实例化工厂。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多