Javascript面向对象问题
所以我想用javascript构建一个表单验证类/对象。我认为它的工作原理是这样的:Javascript面向对象问题,javascript,language-agnostic,oop,Javascript,Language Agnostic,Oop,所以我想用javascript构建一个表单验证类/对象。我认为它的工作原理是这样的: var form=new Validation(); form.addField("name","Your name","required"); form.addField("email","Email Address","is_email"); ......... form.validate(); 我在想,validation类的定义是这样的 validation { var fields=new
var form=new Validation();
form.addField("name","Your name","required");
form.addField("email","Email Address","is_email");
.........
form.validate();
我在想,validation
类的定义是这样的
validation
{
var fields=new Array();
var labels=new Array();
var rules=new Array();
var count=0;
function addField(field,label,rule)
{
this.fields[count]=field;
this.labels[count]=label;
this.rules[count]=rule;
this.count=count+1;
}
function validate()
{
var valid;
for (x=0; x< count; x++)
{
valid=false;
switch (this.rules[x])
{
case 'required':
valid=this.validate_required(this.fields[x]);
break;
case 'email':
valid=this.validate_email(this.fields[x]);
break;
}
if (! valid)
this.addError(this.fields[x],this.rules[x],this.labels[x]);
}
if (this.hasErrors())
return false;
else
return true;
}
..........
}
验证
{
变量字段=新数组();
var labels=新数组();
var规则=新数组();
var计数=0;
函数addField(字段、标签、规则)
{
this.fields[count]=字段;
this.labels[count]=标签;
this.rules[count]=规则;
this.count=count+1;
}
函数验证()
{
var有效;
对于(x=0;x
我知道这可能是不可能的,因为现在是这样。我的问题是,如何才能使第一个代码块(它创建了一个新的验证实例并将规则添加到其中)正常工作
提前谢谢。您只是缺少一些OO符号。标有“//***”
注释的行是我从原始代码示例中更改的行:
function Validation() // ***
{
var fields=new Array();
var labels=new Array();
var rules=new Array();
var count=0;
this.addField = function (field,label,rule) // ***
{
fields[count]=field; // ***
labels[count]=label; // ***
rules[count]=rule; // ***
count=count+1;
}
this.validate = function () // ***
{
var valid;
for (x=0; x< count; x++)
{
valid=false;
switch (rules[x]) // ***
{
case 'required':
valid=this.validate_required(fields[x]); // ***
break;
case 'email':
valid=this.validate_email(fields[x]); // ***
break;
}
if (! valid)
this.addError(fields[x],rules[x],labels[x]); // ***
}
if (this.hasErrors())
return false;
else
return true;
}
}
函数验证()//***
{
变量字段=新数组();
var labels=新数组();
var规则=新数组();
var计数=0;
this.addField=函数(字段、标签、规则)//***
{
字段[计数]=字段;//***
标签[计数]=标签;//***
规则[计数]=规则;//***
计数=计数+1;
}
this.validate=函数()//***
{
var有效;
对于(x=0;x
哦,我没有看到validate\u required()
,validate\u email()
,addError()
也没有看到hasrerrors()
。可能需要添加这些符号。您只是缺少一些OO符号。标有“//***”
注释的行是我从原始代码示例中更改的行:
function Validation() // ***
{
var fields=new Array();
var labels=new Array();
var rules=new Array();
var count=0;
this.addField = function (field,label,rule) // ***
{
fields[count]=field; // ***
labels[count]=label; // ***
rules[count]=rule; // ***
count=count+1;
}
this.validate = function () // ***
{
var valid;
for (x=0; x< count; x++)
{
valid=false;
switch (rules[x]) // ***
{
case 'required':
valid=this.validate_required(fields[x]); // ***
break;
case 'email':
valid=this.validate_email(fields[x]); // ***
break;
}
if (! valid)
this.addError(fields[x],rules[x],labels[x]); // ***
}
if (this.hasErrors())
return false;
else
return true;
}
}
函数验证()//***
{
变量字段=新数组();
var labels=新数组();
var规则=新数组();
var计数=0;
this.addField=函数(字段、标签、规则)//***
{
字段[计数]=字段;//***
标签[计数]=标签;//***
规则[计数]=规则;//***
计数=计数+1;
}
this.validate=函数()//***
{
var有效;
对于(x=0;x
哦,我没有看到validate\u required()
,validate\u email()
,addError()
也没有看到hasrerrors()
。可能需要添加它们。Javascript是编程语言。所以没有真正的方法来创建类。
创建类(或模拟类)的方法是使用包含状态的函数和包含行为的更多函数
要解决您的问题,您可以使用全局级别的函数创建验证类,并为每个表单使用新关键字对其进行实例化
所以实际上你只需要把你的类定义变成一个函数。(约定:大写V只是用来表示这个函数是一个类)
函数验证()
{
变量字段=新数组();
var规则=新数组();
var labels=新数组();
var errors=新数组();
var计数=0;
函数加法器(字段、规则、标签){
//在错误数组中添加错误
}
需要功能验证(字段){
//进行必要的验证
}
功能验证\u电子邮件(字段){
//进行电子邮件验证
}
返回函数(){
addField=函数(f,r,l){
此字段[计数]=f;
此.rules[count]=r;
这个。标签[计数]=l;
this.count=count+1;
}
验证=函数()
{
var有效;
对于(x=0;x
要了解更多关于JavaScript及其特性(和麻烦),您可以浏览。它有许多易于理解的JavaScript参考,特别是与原型和继承相关的参考。JavaScript是编程语言。因此,没有真正的方法来创建类。
创建类(或模拟类)的方法是使用包含状态的函数和包含行为的更多函数
要解决您的问题,您可以使用全局级别的函数创建验证类,并为每个表单使用新关键字对其进行实例化
所以实际上你只需要