私有范围Javascript的最佳方法?
我目前正在JQuery的私有范围Javascript的最佳方法?,javascript,Javascript,我目前正在JQuery的文档中编写特定页面的所有javascript功能。ready处理程序: $(document).ready(function() { var one, two, three; function f1(par1) {} function f2() {} ... }); 我觉得这不是最优的,或者根据Javascript最佳实践。我需要的是页面功能的私有范围,无需外部调用 我看到了许多不同的方法: 以窗口作为参数自调用的函数,然后在其上
文档中编写特定页面的所有javascript功能。ready
处理程序:
$(document).ready(function() {
var one, two, three;
function f1(par1) {}
function f2() {}
...
});
我觉得这不是最优的,或者根据Javascript最佳实践。我需要的是页面功能的私有范围,无需外部调用
我看到了许多不同的方法:
以窗口
作为参数自调用的函数,然后在其上设置应用程序的功能
对象
与jQuery的功能非常相似,但通过使自调用函数首先返回某些内容,间接地在窗口上设置functionality对象
创建一个局部变量(而不是在窗口
),并在自调用函数中设置其内容(为什么?)
与前面的内容基本相同,但是设置内容时没有自调用函数(同样,为什么要使用或不使用自调用函数?)
所以哪种方式最好?我建议使用模块模式,将页面视为模块。web上有很多关于javascript模块模式的信息。看一看
我使用了中的一个示例,并对其进行了一些修改:
var MyApp = MyApp || {};
MyApp.PageX = (function () {
var my = {},
privateVariable = 1;
function privateMethod() {
// ...
}
my.moduleProperty = 1;
my.moduleMethod = function () {
// ...
};
return my;
}());
这里发生的事情是,定义了一组属性和方法,并将其命名为MyApp.PageX
,MyApp
作为全局。因此,这将起作用:
MyApp.PageX.moduleProperty; // 1
MyApp.PageX.moduleMethod();
对于私有功能,您是指仅在特定页面上运行/查看的功能吗?@TJ是的,是javascript在页面的生命周期内控制页面,但页面上的其他javascript不应访问该功能。
var functionality = {};
(function(obj) { obj.f1 = ... }(functionality));
var functionality = {
f1: function(){},
f2: function(){}
}
var MyApp = MyApp || {};
MyApp.PageX = (function () {
var my = {},
privateVariable = 1;
function privateMethod() {
// ...
}
my.moduleProperty = 1;
my.moduleMethod = function () {
// ...
};
return my;
}());
MyApp.PageX.moduleProperty; // 1
MyApp.PageX.moduleMethod();