我正在寻找标准方法来做到这一点.. 这篇文章here探讨了3种方法。 Here来。您应该以哪种方式用于通用案例......这是一个偏好问题 例如,如果我使用实例化方式..我有两行代码而不是一行...我必须实例化对象...而不是调用方法... 如果我使用静态类型实现而不是实例化任何对象。 模块模式的第3个选项...更昂贵b.c.它是自动执行的。
如果我必须给他们起名字:
一般情况下建议使用哪种方式,因此每次开始合并方法时我都不必讨论这个问题。
以下是我想要整合的收集方法的示例。
/********************
group:checks
********************/
var patterns =
{
name: /^[a-zA-Z-\s]{1,20}$/,
email: /^[a-zA-Z0-9._(-)]+@[a-zA-Z0-9.(-)]+\.[a-zA-Z]{1,4}$/,
pass: /.{6,40}/,
url: /^[(-)\w&:\/\.=\?,#+]{1,}$/,
aml: /<(.+)_([a-z]){1}>$/
};
/*
- check_generic() - generic
*/
function check_generic(reg_ex_in,text,html_id,response)
{
if(!reg_ex_in.exec(text.value))
{
fill_id(html_id,response);
return 0;
}
return 1;
}
/*
- check_empty() - checks for empty text
*/
function check_empty(text,html_id,response)
{
for(var a=0;a<text.length;a++)
{
if(text[a].value==='')
{
fill_id(html_id,response);
return 0;
}
}
return 1;
}
/*
- check_same() - checks if two text entries are the same
*/
function check_same(text1,text2,html_id,response)
{
if((text1.value)!==(text2.value))
{
fill_id(html_id,response);return 0;
}
fill_id(html_id,'');
return 1;
}
答案 0 :(得分:4)
以下是我通常遵循的规则:
如果我将一组无状态静态函数组合在一起(实质上是命名它们),我会将它们粘贴在一个对象中:
var MyNamespace = {
patterns: {
name: /^[a-zA-Z-\s]{1,20}$/,
email: /^[a-zA-Z0-9._(-)]+@[a-zA-Z0-9.(-)]+\.[a-zA-Z]{1,4}$/,
pass: /.{6,40}/,
url: /^[(-)\w&:\/\.=\?,#+]{1,}$/,
aml: /<(.+)_([a-z]){1}>$/
},
check_generic: function(reg_ex_in,text,html_id,response)
{
if(!reg_ex_in.exec(text.value))
{
fill_id(html_id,response);
return 0;
}
return 1;
}
};
如果我希望有一个有状态的类实现而不关心访问控制,我将使用实例化方法:
var MyClass = function(param) {
// initialize here
};
MyClass.prototype = {
// method definitions here
};
如果我正在做一些需要访问控制的更复杂的事情,我将使用模块模式:
var mod = (function() {
var o = {};
var _p = "myprivatestring";
o.p = "mypublicstring";
o.myfunc = function() {
this.p = _p;
};
return o;
})();
console.log(mod.p);
mod.myfunc();
console.log(mod.p);