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
其他人
instanceof duke === Person // true
instanceof dust !== AnotherPerson // true
Person
模式可能有助于构建将被实例化的对象,该对象也可以是模块。另一方面,OtherPerson
构造函数只返回一个简单的JavaScript对象,因此以后没有必要实例化它。但是,非对象构造函数的模块可以使用此模式(例如,使用其他本地定义数据的函数)。模块模式的优点是可以隐藏私有变量和方法。显示模块模式变量实现使您能够轻松地修改代码,从私有代码切换到公共代码,反之亦然,但需要一段时间。有关模块模式实现中的差异,请参见,但其要点是显示模块模式在重写和原型继承方面表现不佳
您的OtherPerson
就是显示模块模式的一个示例。您的Person
是经典的JavaScript,但是,根据您实现更复杂示例的方式,它可以像模块模式的原始实现一样使用常规覆盖和原型覆盖。模块模式与您的示例不同之处在于,模块模式避免使用许多人讨厌的new
关键字,并且模块模式组织使查看哪些方法是公共的,哪些是私有的变得更容易