繁体   English   中英

JavaScript和AngularJs模块之间的区别和用法

[英]Difference between & usage of JavaScript & AngularJs Modules

下面的代码向您展示一个JavaScript模块(显示模式):

var module = (function(){

    var _privateMethod = function(){
      //code here
    }

    var publicMethod = function(){
      //code here
    }

    return {
       publicMethod: publicMethod
    }

})();

上面的显示模块模式具有很多优点,例如:

  1. 提供公共和私有方法(封装)
  2. 应用功能可分为多个模块
  3. 将来更容易扩展和调试

到目前为止,我一直在我的应用程序中使用上述模块模式,并且运行良好

现在,我正在尝试在我的应用程序中使用AngularJs 事情这就是困惑我是如何使用角模块和使用JavasScript模块(见上文) 在一起吗?

普通的JavaScript模块(请参见上文)提供了封装,这非常重要,因为JavaScript本身不包含私有和公共功能。

所以我的问题是,在使用angularJs模块时,是否可以使用JavaScript模块?

我应该将我的应用程序功能划分为angularJS模块吗?

我们定义的角度模块和上面显示的JavaScript模块模式之间有什么区别吗?

我认为术语“模块”使我感到困惑。 如果这个问题看起来太笼统,我深表歉意,但是即使尝试解释这个问题对我来说也很难。

Angular服务(非模块)和JS模块(ES6 / CJS / AMD /其他)均提供模块化和封装,因此不需要IIFE作为模块模式。

IIFE作为Angular中的模块模式的最常见用例是防止constant服务中的变量泄漏,因为它没有工厂功能并且不能与其他服务类型互换。

app.constant('...', (() => {
    var _private = () => { ... };
    return { ... };
})());

在Angular中(通常在JS中)通过函数作用域进行封装有一个主要缺点。 JS中没有函数作用域的反映,并且未在对象上公开的私有方法无法在测试中进行测试或模拟。

另一个问题是,无法对Revealing Module私有方法进行修补或模拟(通过Angular中的decorator )。 由于JS中没有安全性,因此安全性几乎无法从中受益,但这会导致WET代码重新实现公共方法。

TL; DR:仅暴露对象上强调的方法,添加defineProperty使其具有品味。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM