【问题标题】:Modules that are not IIFEs不是 IIFE 的模块
【发布时间】:2015-10-08 03:13:41
【问题描述】:

Data dependency in module

我的应用中有几个模块依赖于来自服务器的数据。正如模块模式所建议的那样,我将模块实现为 IIFE,但为了能够将它们作为 ajax 请求的回调引用,我正在考虑将它们定义为常规函数,并在回调中初始化它们(参见答案其他帖子供参考)。我所到之处,模块模式都由 IIFE 组成。将它们用作我在 AJAX 回调中实例化的常规函数​​有哪些缺点(如果有)?这是一个好习惯吗?

【问题讨论】:

  • 您是否立即调用该函数 (IIFE) 或稍后调用该函数并没有真正对功能产生影响。该函数仅用于创建“私有”范围。 何时调用它并不重要。
  • ……如果你不需要任何私有变量来创建你的模块,那么你根本不需要 IIFE。只需将值(对象字面量、函数声明、ajax 承诺等)放在那里。

标签: javascript ajax module iife


【解决方案1】:

请看上一篇文章中的以下示例:

getAJAX(url, function(data){
         // write any code that want data from Ajax.
       }, true);

此代码包含 IIFE 函数调用。在这里它被称为 anonymous 功能也。这是一种调用内联函数的方式 与模块化方法无关。

请参阅以下 javascript 中的类表示:

var ClassName = function(data, pubsubService) {
var items = [];
// public function
this.generateItems = function(firstItemIndex, stopIndex) {
    var dataLength = data.length;
    stopIndex = (stopIndex < dataLength) ? stopIndex : dataLength;
    items = data.slice(firstItemIndex, stopIndex);
    pubsubService.publish('itemsGenerated');
};
// private function
var getItems = function() {
    return items;
};

return {
    generateItems : generateItems,
    getItems : getItems
};
};

这是一个类,其中generateItems 是公共函数,getItems 是私有函数。

现在参考您之前的帖子,而不是创建常规函数,而是创建一个包含该模块方法的 module 类,创建 object 并调用如下方法:

Var obj = new ClassName(data,pubsubService);
obj.generateItems(firstItemIndex,stopIndex);

我认为这可以帮助您理解这个概念。

请参阅以下链接以了解更多信息:

http://book.mixu.net/node/ch6.html

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript

http://www.htmlgoodies.com/html5/tutorials/create-an-object-oriented-javascript-class-constructor.html#fbid=5m_t2A6hozg

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2020-09-05
    • 2016-01-13
    相关资源
    最近更新 更多