javascript - 从基本提供者继承时如何防止直接访问属性?

标签 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 属性。

这是一个演示问题的示例:

最佳答案

不太确定您在寻找什么,但是 this.config.x 不是变量而是属性,这就是它可以访问的原因。

如果您希望它不可访问,您需要将其声明为局部变量 var config = {} 在 Controller /服务/工厂/任何您设置它的范围内。因为函数/方法内的局部变量在其作用域之外是不可访问的,除非它们是闭包。

这是您的代码版本,它实例化了一个函数 BaseClient(但不再是提供程序,只是一个常规函数),其中包含一个无法触及的局部变量。同样,我不知道这是否是您想要的,因为我不知道您要解决哪个问题。

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

关于javascript - 从基本提供者继承时如何防止直接访问属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30970343/

相关文章:

Javascript:公开 IIFE 中定义的全局对象

Java:当 B 实现 A 时从 List<B> 转换为 List<A>?

c# - 将多态列表合并为一个列表并获取派生类型

javascript - 如何使用嵌套表达式查找 JSON 对象?

javascript - 通过 Angular Factory 在 Javascript 中进行过滤、切片、排序

javascript - (Spotify Web API) 创建新播放列表 - POST 请求返回 'Error 403 (Forbidden)'

javascript - $http 成功功能 block 中不可用的动态元素和范围变量

angularjs - Webpack 无法解析其他库中的模块 'angular'

javascript - 单击我需要在该特定行的下一列中添加图像的复选框

c++ - 基类嵌套类的外联定义