Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript面向对象问题_Javascript_Language Agnostic_Oop - Fatal编程技术网

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

所以我想用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 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是编程语言。因此,没有真正的方法来创建类。 创建类(或模拟类)的方法是使用包含状态的函数和包含行为的更多函数

要解决您的问题,您可以使用全局级别的函数创建验证类,并为每个表单使用新关键字对其进行实例化

所以实际上你只需要