Javascript模块模式

Javascript模块模式,javascript,revealing-module-pattern,Javascript,Revealing Module Pattern,我很难理解显示模块模式的优势。 以以下代码为例: var Person = function(name){ this.name = name; var priv = 'secret'; } var OtherPerson = function(name){ var name = name; var priv = 'secret'; return({name: name}); } duke = new Person('john'); dust = new OtherPers

我很难理解显示模块模式的优势。 以以下代码为例:

var Person = function(name){
  this.name = name;
  var priv = 'secret';
}

var OtherPerson = function(name){
  var name = name;
  var priv = 'secret';
  return({name: name});
}

duke = new Person('john');
dust = new OtherPerson('doe');
据我所知,OtherPerson应该是一个经典的揭示模块,因为我在网络上的各种资源中找到了它。那么,人和其他人之间的区别是什么呢

我个人认为那个人看起来干净多了,你可以更容易地看到你的私有变量和公共变量。

  • duke
    是一个
  • dust
    不是
    其他人
在JavaScript中:

instanceof duke === Person // true
instanceof dust !== AnotherPerson // true

Person
模式可能有助于构建将被实例化的对象,该对象也可以是模块。另一方面,
OtherPerson
构造函数只返回一个简单的JavaScript对象,因此以后没有必要实例化它。但是,非对象构造函数的模块可以使用此模式(例如,使用其他本地定义数据的函数)。

模块模式的优点是可以隐藏私有变量和方法。显示模块模式变量实现使您能够轻松地修改代码,从私有代码切换到公共代码,反之亦然,但需要一段时间。有关模块模式实现中的差异,请参见,但其要点是显示模块模式在重写和原型继承方面表现不佳

您的
OtherPerson
就是显示模块模式的一个示例。您的
Person
是经典的JavaScript,但是,根据您实现更复杂示例的方式,它可以像模块模式的原始实现一样使用常规覆盖和原型覆盖。模块模式与您的示例不同之处在于,模块模式避免使用许多人讨厌的
new
关键字,并且模块模式组织使查看哪些方法是公共的,哪些是私有的变得更容易