Kaz*_*Koe 5 javascript namespaces
我目前正在使用以下模式在Javascript中创建名称空间和单例对象:
var Namespace = function () {
var priv = {
privateVar1: '',
privateVar2: '',
privateFunction1: function () {
//do stuff
[...]
},
[...]
};
var pub = {
publicVar1: '',
publicFunction1: function () {
//do stuff with private functions and variables
priv.privateVar1 = priv.privateFunction1(pub.publicVar1);
[...]
},
[...]
};
return pub;
}();
Run Code Online (Sandbox Code Playgroud)
我希望你明白这个主意.有没有办法创建您认为更清洁或更好的命名空间(解释原因)?
实际上,这完全是语义学.如果您将代码分开多个文件并计划使用通用命名空间,那么执行此类操作会更容易一些:
我喜欢这种方法的原因是它更加模块化,允许将代码分解为多个文件,然后就可以轻松地将它们压缩成一个没有依赖性问题的代码(除非你的命名空间函数依赖于彼此)
这样做的缺点是,如果使用不正确,有时会感觉有点混乱 - 我猜这可能适用于任何事情.
在命名空间文件中
var Namespace = {};
Run Code Online (Sandbox Code Playgroud)
在您使用命名空间的其他JavaScript文件中
var Namespace = Namespace === undefined ? {} : Namespace;
Namespace.stuff = function () {
var private = 'foo';
function private_func() {
};
this.public = 'bar';
this.public_func = function () {
}
};
Run Code Online (Sandbox Code Playgroud)
一些实际应用将是:
GUI.js
// Some general GUI
var GUI = {
'MAX_WIDTH': $(window).width(),
'MAX_HEIGHT': $(window).height()
};
Run Code Online (Sandbox Code Playgroud)
Toolbar.js
GUI.Toolbar = function (id) {
var self = this;
function init_visuals() {
$(id).click(function () {
self.alert_broken();
});
};
function initialize() {
init_visuals();
};
this.alert_broken = function () {
alert('Broken!');
};
initialize();
};
Run Code Online (Sandbox Code Playgroud)
Menu.js
GUI.Menu = function () {
}; GUI.Menu.prototype = new GUI.Toolbar();
Run Code Online (Sandbox Code Playgroud)
现在,单身人士 - 这是另一个论点.
| 归档时间: |
|
| 查看次数: |
977 次 |
| 最近记录: |