Javascript 显示模式用例
我正在读Addy Osmani写的《学习javascript设计模式》一书。这本书很棒 这里有一个使用显示设计模式的示例:Javascript 显示模式用例,javascript,design-patterns,factory,revealing-module-pattern,Javascript,Design Patterns,Factory,Revealing Module Pattern,我正在读Addy Osmani写的《学习javascript设计模式》一书。这本书很棒 这里有一个使用显示设计模式的示例: var myRevealingModule = (function () { var privateVar = "Ben Cherry", publicVar = "Hey there!"; function privateFunction() { console.log( "Name:" + privateVar );
var myRevealingModule = (function () {
var privateVar = "Ben Cherry",
publicVar = "Hey there!";
function privateFunction() {
console.log( "Name:" + privateVar );
}
function publicSetName( strName ) {
privateVar = strName;
}
function publicGetName() {
privateFunction();
}
// Reveal public pointers to
// private functions and properties
return {
setName: publicSetName,
greeting: publicVar,
getName: publicGetName
};
})();
myRevealingModule.setName( "Paul Kinlan" );
现在,我当然理解了它是如何工作的,但我的问题更简单——在常规的、经典的节点webapp中使用它的用例是什么
假设我有一个汽车模块,我希望在我的一些程序中创建它。我看不出在这种情况下如何使用该模式。如何传递参数以生成新车(args)
我应该为单身人士使用这种模式吗?创建工厂?JavaScript是一种有点奇怪的语言,如果不遵循最佳实践,或者不熟悉ECMA标准,有时会做一些奇怪的事情。JavaScript语法中有很多奇怪的东西,其中之一就是自执行(自调用)函数 更多细节,你可以在这里阅读
http://blog.mgechev.com/2012/08/29/self-invoking-functions-in-javascript-or-immediately-invoked-function-expression/
您可以像这样传递参数:
https://jsfiddle.net/6bhn80oz/
此模式用于封装某些私有状态,同时公开(“揭示”)公共接口 该模式可能有许多用例,但在其核心中,它展示了如何将实现(私有变量)与API(公开函数)分离,这在javascript中是不容易实现的 当你有一个有状态的模块时,最好使用它 要提供参数,只需公开一个接受参数的API函数,例如
return {
createCar: function(model, mileage) { ... }
}
我经常在angular 1中创建服务时使用它。对我来说,更容易知道我可以在服务中访问哪些方法和/或变量,并将
return{}
private之外的所有内容保持为私有
angular.module('myModule')
.factory('someService', function () {
function myFunction(){
}
return{
getSomething:myFunction
}
});
这是工厂模式的一个例子。这是一个合理的用法,我知道。问题是我还有什么其他用例可以使用暴露模块。我认为这个名称是误导性的,因为它实际上适用于函数和模块,如果您返回了一个函数,而不是一个对象文本,那么您现在有一个函数可以在调用之间具有内部状态(这是另一个用例)调用之间具有不同状态的函数。听起来很可怕——我不得不承认。函数应该是一个函数,我想就是这样。奇怪的是,将函数视为有状态对象,而不仅仅是异步操作的回调。我想对工厂使用这种模式是最好的用例。@Chen有一些非常有效的用例,比如函数