Javascript 揭示模块模式
Javascript revealing module pattern
我很难理解揭示模块模式的优点。
取f.e。以下代码:
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 应该是一个经典的揭示模块,因为我在网络上的各种资源中找到了它。那么Person和OtherPerson有什么区别呢?
我个人认为 Person 看起来更干净,您可以更轻松地看到您的私有变量和 public 变量。
嗯,
duke
是一个Person
dust
不是 OtherPerson
在JavaScript中:
instanceof duke === Person // true
instanceof dust !== AnotherPerson // true
Person
模式可能对构建将被实例化的对象很有用,它也可以是一个模块。另一方面,OtherPerson
构造函数只是 returns 一个简单的 JavaScript 对象,因此稍后实例化它是没有意义的。然而,不是对象构造函数的模块可以使用此模式(例如,使用其他本地定义数据的函数)。
模块模式为您提供了隐藏私有变量和方法的优势。 Revealing Module Pattern 变体实现使您能够轻松修改代码以从 private 切换到 public ,反之亦然,但在 significant cost. See this answer 用于 Module Pattern 实现的差异,但它的要点是 Revealing Module Pattern 在覆盖和原型继承方面表现不佳。
您的 OtherPerson
是揭示模块模式的一个例子。你的 Person
是经典的 JavaScript,但是,根据你如何实现一个更复杂的例子,它可以像模块模式的原始实现一样使用,用于常规覆盖和原型覆盖。模块模式与您的示例的不同之处在于,模块模式避免使用许多人讨厌的 new
关键字,并且模块模式组织使得更容易看出哪些方法是 public 与哪些方法是 public 。这是私人的。
我很难理解揭示模块模式的优点。 取f.e。以下代码:
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 应该是一个经典的揭示模块,因为我在网络上的各种资源中找到了它。那么Person和OtherPerson有什么区别呢?
我个人认为 Person 看起来更干净,您可以更轻松地看到您的私有变量和 public 变量。
嗯,
duke
是一个Person
dust
不是OtherPerson
在JavaScript中:
instanceof duke === Person // true
instanceof dust !== AnotherPerson // true
Person
模式可能对构建将被实例化的对象很有用,它也可以是一个模块。另一方面,OtherPerson
构造函数只是 returns 一个简单的 JavaScript 对象,因此稍后实例化它是没有意义的。然而,不是对象构造函数的模块可以使用此模式(例如,使用其他本地定义数据的函数)。
模块模式为您提供了隐藏私有变量和方法的优势。 Revealing Module Pattern 变体实现使您能够轻松修改代码以从 private 切换到 public ,反之亦然,但在 significant cost. See this answer 用于 Module Pattern 实现的差异,但它的要点是 Revealing Module Pattern 在覆盖和原型继承方面表现不佳。
您的 OtherPerson
是揭示模块模式的一个例子。你的 Person
是经典的 JavaScript,但是,根据你如何实现一个更复杂的例子,它可以像模块模式的原始实现一样使用,用于常规覆盖和原型覆盖。模块模式与您的示例的不同之处在于,模块模式避免使用许多人讨厌的 new
关键字,并且模块模式组织使得更容易看出哪些方法是 public 与哪些方法是 public 。这是私人的。