干 - 不要重复自己
ControlSignUp和ControSignIn几乎完全相同。我在仅有4条不同的线路上评论了“这里”。如何组合这种常用功能?
实际上它似乎很明显..我可以通过构造函数传递一个变量......只需一秒钟。
答案:
/**
* ControlSign
*/
var ControlSign = function( type )
{
var form_element = document.getElementById( type );
var response_element = document.getElementById( type + '_response' );
var text_object = new Text( form_element );
var message_object = new Message( response_element );
this.invoke = function( )
{
if( Global.validate_input_on === 1 )
{
if( !text_object.checkEmpty() )
{
message_object.display( 'empty' );
return false;
}
if( type === 'signup' && !text_object.checkPattern( 'name' ) )
{
message_object.display( 'name' );
return false;
}
if( !text_object.checkPattern( 'email' ) )
{
message_object.display( 'email' );
return false;
}
if( !text_object.checkPattern( 'pass' ) )
{
message_object.display( 'pass' );
return false;
}
}
AjaxNew.repeatUse( ajaxSerialize( form_element ) + '&ajax_type=' + type + '_control', function( server_response_text ) { ajaxType( server_response_text, response_element, 'respond' ); } );
}
};
ControlSign.in = function()
{
new ControlSignIn( 'signin' ).invoke();
};
ControlSign.up = function()
{
new ControlSignUp( 'signup' ).invoke();
};
答案 0 :(得分:2)
简单解决方案:使用ControlSign
或"in"
调用的参数使其成为"up"
函数。你可以称之为“工厂模式”。
复杂解决方案:使用 factory 函数创建两个构造函数。好吧,我的意思是使用闭包来创建构造函数:
function makeControlSign(type) {
function constructor(...) {
this.invoke = function(){...};
// use the variable "type" where needed
...
}
constructor[type] = function(){...};
return constructor;
}
var ControlSignUp = makeControlSign("up");
var ControlSignIn = makeControlSign("in");
我想这不应该被称为“工厂模式”或“抽象工厂模式”。