AngularJS 中可注入服务的接口

Interfaces for injectable services in AngularJS

我是 AngularJS 的新手。据我了解,依赖注入的全部意义在于,以后可以轻松地将依赖项与 "similar" 依赖项交换,并且代码仍然可以正常工作。 "similar" 通常意味着依赖项实现了某种接口。

如果我正在编写一个控制器,而我的同事正在编写一个我将在我的控制器中使用的服务,我如何才能确保他为我提供的服务包含我的所有东西需要?在传统的 OO 语言中,他的服务将是 class 实现接口,这将迫使他实现某些方法。但是如何在angularJS中做到这一点呢?我是否必须检查该服务是否具有我想要的所有方法的属性,以及所有这些属性的 __proto__ 是否为 Function.prototype?并检查这些方法是什么 return,我是否使用模拟对象调用它们然后检查 returned 对象? 或者有更好的推荐方法吗?

这可能是 DI 的一个特性,但重点是能够明确地看到您的依赖项来自哪里,而不是像 window 这样的神奇全局。

JavaScript 没有强制接口的隐式方式。你的同事会创建一个服务或工厂,为一个对象提供附加的功能和属性。同样,这些函数可以 return 随心所欲,而您没有办法强制执行它们 return。

如果您想确保您的同事return符合您的期望,编写单元测试并使用 ngMock 可能是个好主意。

此外,附加到 prototype 而不是 __proto__