请解释这个javascript函数的定义和它们的最佳用途(模块模式)
Please explan this javascript function definition and their best use (Module Pattern)
下面是什么类型的函数,哪些是它们的最佳用途?
var f = function (){
var a = 0;
return {
f1 : function(){
},
f2 : function(param){
}
};
}();
我试图将其转换为:
var f = {
a : 0,
f1: function (){
},
f2: function (param){
}
}
但是似乎不一样
这只是一个立即调用的普通旧函数,并返回一个对象,然后由f
引用。
被返回对象引用的函数保留了引用a
变量的能力。
立即调用的函数之外的代码不能引用a
,所以它享受一些保护,因为您可以通过导出的函数精确地控制a
发生的事情。
此模式有时称为模块模式。
关于您更新的问题,它不一样,因为a
现在是对象的公开可用的属性。
对于引用它的函数,它们将做:
f.a;
或者如果函数将从f
对象调用,他们可以这样做:
this.a;
:
var f = {
a : 0,
f1: function (){
alert( this.a );
},
f2: function (param){
this.a = param;
}
}
f.f2( 123 );
f.f1(); // alerts 123
但关键是a
是公开可用的。任何可以访问f
的代码都可以访问f.a
,因此无需使用f1
和f2
函数即可对其进行更改。
这就是第一段代码的美妙之处。您可以精确地控制a
。
基本上创建了一个"类" - JS没有类,所以一个类基本上是一个函数,比如你的函数f
。
你发布的代码的有趣之处在于它创建了一个私有变量a
和两个公共函数f1
和f2
。它们是公共的,因为构造函数——外部函数——返回它们。
这是组织和封装JS代码的常用模式。
你可以在这里阅读更多信息
创建并返回对象是一个简单的函数。它立即执行,其结果保存到变量f
首先声明一个局部(或私有)变量a,该变量仅在函数的作用域中可见。然后,它构造一个对象,该对象具有成员f1
和f2
,这两个成员都是函数。由于该返回对象是在声明a的同一作用域中声明的,因此f1和f2都可以访问a。
您的转换只是创建一个对象。以前的函数可以创建无数个对象,而现在只有一个对象,仅此而已。我不确定为什么它不起作用,但一个主要的区别是a
现在对世界是可见的,在此之前它是私有的返回对象。
相关文章:
- 将JavaScript检测与MVC4显示模式集成的最佳方式是什么
- JS中运行时上下文模式的最佳实践
- angularjs设计模式和从服务器获取数据的最佳实践
- 确定公开JS实用程序函数的最佳模式
- Javascript的MVC模式的最佳示例
- 节点.js中模块模式的最佳实践
- 提供模式窗口的最佳做法
- 使用jQuery命名属性的最佳模式
- 装饰器或子类化是React.Component的最佳模式
- 什么'当从AngularJS中的API响应接收到错误时,触发错误弹出模式的最佳方式
- 使用Jquery和Bootstrap处理多模式的最佳方式
- 什么'这是在加载页面时显示bootstrap 2.0模式的最佳方式
- 什么'声明和获取js对象的最佳方式是什么?(模式)
- Backbone.js中混合集合的最佳设计模式
- 在Node.js中处理异步循环的最佳模式
- 在揭示模块模式中访问私有方法的最佳实践
- 请解释这个javascript函数的定义和它们的最佳用途(模块模式)
- 在Backbone中保存对全局集合的引用的最佳模式
- 在jquery插件中添加简单的公共方法的最佳模式是什么?
- 处理编排的最佳模式.io查询