Javascript模块化设计模式-哪个更好:自调用函数还是对象文字方法?

神圣的莫利

为了编写更好,更紧密,更安全的代码,我很高兴在Javascript中采用一种更加模块化的模式。但是,在关于这个主题的自我教育中,我看到有不同的方法可以做到这一点。似乎最常见的两个是自调用功能模式(来自本文):

var HTMLChanger = (function() {
  var contents = 'contents'

  var changeHTML = function() {
    var element = document.getElementById('attribute-to-change');
    element.innerHTML = contents;
  }

  return {
    callChangeHTML: function() {
      changeHTML();
      console.log(contents);
    }
  };

})();

HTMLChanger.callChangeHTML();       // Outputs: 'contents'
console.log(HTMLChanger.contents);  // undefined

或者,从另一篇文章中,对象字面量方法模式:

var s,
NewsWidget = {

  settings: {
    numArticles: 5,
    articleList: $("#article-list"),
    moreButton: $("#more-button")
  },

  init: function() {
    s = this.settings;
    this.bindUIActions();
  },

  bindUIActions: function() {
    s.moreButton.on("click", function() {
      NewsWidget.getMoreArticles(s.numArticles);
    });
  },

  getMoreArticles: function(numToGet) {
    // $.ajax or something
    // using numToGet as param
  }

};

而且我敢肯定,还有很多其他人(在第一篇文章中有一些描述)-哪种模式更好和/或更常见?如果要选择默认的go-to(除非我有特殊的理由要选择其他模式),应该是什么,为什么?

混合搭配完全可以接受吗?

路西欧

我不会说一个比另一个更好,但是我会尽力阐明每个优点,以便您可以根据自己的情况选择使用哪个。

构造函数模式使用其属性和方法创建一个对象,所有这些对象都是公共的。这很容易理解,您仍然可以在创建后添加功能。

自我调用模式(也称为SEAF或IIFE)在开始时可能看起来比较复杂,但是它具有私有属性或方法的优点,因此您可以指定要公开的代码部分。您也可以通过跳过return语句将其全部设为私有。

一篇出色的文章帮助我理解了JavaScript模式,这就是“良好的C#习惯如何鼓励不良的JavaScript习惯”即使从C#到Java语言,它也适合使用JS的任何人。

结论是,IIFE模式将为您提供您可能希望在模块中添加的所有工具,但这并不意味着在功能不太复杂的某些情况下,使用构造函数模式并不方便。关于混合它们,我个人不喜欢将多个模式用于一个目标的项目。使用IIFE的IMHO更加健壮且长期有用,但对于快速有趣的游戏对象文字而言,可能是一种方法:-)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在揭示模块化模式对象上创建继承

来自分类Dev

模块化应用程序模式:如何检查哪个是调用模块

来自分类Dev

在JavaScript中构建模块化方法

来自分类Dev

Android中模块化AsyncTask的设计模式

来自分类Dev

如何在模块化设计模式中嵌套功能?

来自分类Dev

如何在模块化设计模式中嵌套功能?

来自分类Dev

模块模式或模块化

来自分类Dev

模块化编程和函数原型

来自分类Dev

Node.js 模块化函数

来自分类Dev

模块化C ++设计

来自分类Dev

模块化网页设计

来自分类Dev

模块化gulp / node.js,调用模块变量

来自分类Dev

具有Javascript模块化模式的Kendo UI

来自分类Dev

模块化模式下的Javascript宽松扩展

来自分类Dev

模块化JavaScript-除了CommonJS和AMD,还有其他方法可以考虑吗?

来自分类Dev

返回模块化的空函数有什么处理?

来自分类Dev

在R中的模块化函数内访问值

来自分类Dev

如何在导出的函数中对导出模块化

来自分类Dev

Matlab中的模块化乘法逆函数

来自分类Dev

模块化 JS:如何运行非全局函数

来自分类Dev

Javascript模块化算术

来自分类Dev

流星:导入目录-模块化导入所需的方法

来自分类Dev

Angular JS模块化方法控制器结构

来自分类Dev

如何在PHP中模块化类方法?

来自分类Dev

Sinatra:模块化路由类无法识别辅助方法

来自分类Dev

Javascript DRY设计模式-函数与对象

来自分类Dev

了解揭示模块化模式

来自分类Dev

导出自调用函数的模块的声明

来自分类Dev

异步设计模式-哪个更好?