如何在从基础提供程序继承时阻止对属性的直接访问?

时间:2015-06-21 23:31:01

标签: javascript angularjs inheritance prototypal-inheritance angularjs-provider

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

但是这导致了另一个我没想到的问题。使用此技术,我的提供程序现在可以通过provider.setX函数进行配置,以及直接访问provider.config.x属性。

以下是展示此问题的示例:

1 个答案:

答案 0 :(得分:1)

不确定您之后的情况,但var config = {}不是变量,而是属性,这就是它可以访问的原因。

如果您希望它不可访问,则需要在控制器/服务/工厂/范围内将其声明为本地变量BaseClient,无论您在何处设置它。因为函数/方法中的局部变量在其范围之外是不可访问的,除非它们被关闭。

这是一个代码版本,它实例化一个函数app.get('/',function(req,res,next){ res.render('index',{}); }); (不再是一个提供者,只是一个常规函数),它包含一个无法触及的局部变量。同样,我不知道这是否是您所追求的,因为我不知道您正在尝试解决哪个问题。

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