通过OO,我指传统的面向对象编程。在定义我的“类”(JavaScript没有传统的类)时,我一直在使用模块模式提供隐私和使用对象字面量创建“公共静态集合”之间来回切换。
在创建“类”时,我没有指导性的力量让我确定要使用什么类型的组织方式。当然,我的代码通过了jshint和jslint的检查,没有设置选项。
我正在处理大约1500行代码,因此在代码变得难以管理并且必须放弃之前,我需要一个“指导性力量”。
我很清楚JavaScript中编写“类”的不同方法。Alex MacCaw撰写的《JavaScript Web Applications》中教授的方法以及SO中列出的众多方法。
但是,在应用程序方面,我不知道什么方法要使用。
最简单的方式似乎是将方法和变量的集合放在一个对象字面量中,如下所示:
在创建“类”时,我没有指导性的力量让我确定要使用什么类型的组织方式。当然,我的代码通过了jshint和jslint的检查,没有设置选项。
我正在处理大约1500行代码,因此在代码变得难以管理并且必须放弃之前,我需要一个“指导性力量”。
我很清楚JavaScript中编写“类”的不同方法。Alex MacCaw撰写的《JavaScript Web Applications》中教授的方法以及SO中列出的众多方法。
但是,在应用程序方面,我不知道什么方法要使用。
最简单的方式似乎是将方法和变量的集合放在一个对象字面量中,如下所示:
var public_statics = {
public_func: function () {},
public_var: "hello"
}
其中最复杂的似乎是 - IIFE。
(function(){
var private_var;
function private_func(){
}
})();
如何判断在众多中间变体中使用哪一个?
以控制器在MVC中为例,该如何选择:
目前(有点随意地选取),我是这样实现控制器的:
var Co = {};
Co.Controller = function(){
// 'classes' from Mo are called here
// 'classes' from Su are called here
}
然后我为Co.添加其他与控制相关的方法。
我该如何选择使用哪种OO风格?
更新
我的库目前分为4个命名空间:
var Mo = {},
Vi = {},
Co = {},
Su = {};
模型(Model)、视图(View)和控制器(Controller)应该是不言自明的,而支持类((Su)pport)则适用于所有未包含在MVC中的“类”,例如DOM访问、特效、调试代码等。
我应该使用什么面向对象风格来进一步组织这个库/代码呢?
控制器“类”的示例:
/**
** Controller
*/
Co.Controller = function (o_p) {
var o_p_string_send;
Su.time();
o_p = Mo[o_p.model].pre(o_p);
if (o_p.result !== 'complete') {
o_p_string_send = JSON.stringify(o_p);
Su.time();
//Su.log(o_p_string_send);
Co.serverCall('pipe=' + o_p_string_send, function (o_p_string_receive) {
Su.time();
//Su.log(o_p_string_receive);
o_p.server = JSON.parse(o_p_string_receive);
Mo[o_p.model].post(o_p);
Su.time(true);
Su.log('Server time: [' + o_p.server.time + ']');
});
}
};