从基本提供程序继承时如何防止直接访问属性

How to prevent direct access to properties when inheriting from a base provider?

本文关键字:何防止 属性 访问 继承 程序      更新时间:2023-09-26

这是How to inherit from base provider(not the provider factory)?的后续内容?。所提出的解决方案建议angular.extendangular.copy的组合(在Angular 1.4上仅使用angular.merge即可完成),以将基本提供者实现复制到所有其他提供者中。

但这导致了另一个我没想到的问题。有了这种技术,我的提供者现在可以通过provider.setX函数进行配置,还可以直接访问provider.config.x属性。

下面是一个演示问题的例子:

  • http://codepen.io/anon/pen/ZGXRKr

不确定你想要什么,但this.config.x不是一个变量,而是一个属性,这就是为什么它是可访问的。

如果你希望它不可访问,你需要在控制器/服务/工厂/的范围内,无论你在哪里设置它,都将其声明为局部变量var config = {}。因为函数/方法内的局部变量在其范围外是不可访问的,除非它们是闭包。

以下是代码的一个版本,它实例化了一个函数BaseClient(不再是提供程序,只是一个常规函数),该函数包含一个不能触摸的局部变量。再说一遍,我不知道这是否是你想要的,因为我不知道你想解决哪个问题。

http://codepen.io/anon/pen/ZGazqo?editors=101