Javascript Can';似乎没有办法';另一种方法中的s值 //表单处理程序 var form=document.getElementsByName('contact-form')[0]; var errDis=document.getElementById('err-dis'); form.onsubmit=function() { var-err=false; var ele=形式元素; 对于(var i=0;i

Javascript Can';似乎没有办法';另一种方法中的s值 //表单处理程序 var form=document.getElementsByName('contact-form')[0]; var errDis=document.getElementById('err-dis'); form.onsubmit=function() { var-err=false; var ele=形式元素; 对于(var i=0;i,javascript,object,Javascript,Object,您在全局范围内定义了方法,因此getQuery()方法中的this关键字指向全局对象(浏览器中的窗口) 您需要将该方法声明为表单构造函数的一部分: //form handler var form=document.getElementsByName('contact-form')[0]; var errDis=document.getElementById('err-dis'); form.onsubmit=function() { var err=false; var ele

您在全局范围内定义了方法,因此
getQuery()
方法中的
this
关键字指向全局对象(浏览器中的
窗口

您需要将该方法声明为
表单
构造函数的一部分:

//form handler
var form=document.getElementsByName('contact-form')[0];
var errDis=document.getElementById('err-dis');

form.onsubmit=function()
{
    var err=false;
    var ele=form.elements;
    for(var i=0;i<ele.length;i++)
    {
        if(ele[i].className.indexOf('verified')==-1)
        {
            ele[i].errBlink();
            err=true; 
            continue;
        }

        if(ele[i].id=='mailer_email')
        {
            //console.log(ele[i].value);    
        }  
    }

    if(!err)
    {
        var conForm=new Form(form);

        conForm.submit;
    }
    else
    {
        errDis.innerHTML="Submit Again With Correct And Proper Information";   
    }
    return false;
}  

//Form Object


Object.size=function(obj)
    {
        var size=0;
        for(var key in obj)
        {
            if(obj.hasOwnProperty(key)) size++;
        }
        return size;
    };



var Form=function(form)
{
    this.form=form;
    this.values=getFormValues();
    this.queryString=getQuery();
    this.submit=console.log(this.queryString);//for test
}

//returns associative array of name=value as key=pair value where name is value of name attribute
function getFormValues()
{
    var vallArr=new Array();
    var form_ele=this.form.elements;
    for(var i=0;i<form_ele.length;i++)
    {
        var ele=form_ele[i];
        vallArr[ele.name]=ele.value.trim();  
    }
    return vallArr;
}


function getQuery()
{
    var valArr=this.values;
    console.log(this.values);
    var queryStr='';
    var len=Object.size(this.values);
    var i=0;
    for(var key in this.values)
    {
        queryStr+=key+'='+this.values[key];
        if(i<(len-1)) queryStr+='&';
        i++;
    }
    return queryStr;
}
我建议您进一步研究javascript中的原型:


在何处以及如何使用
Form()
?更改
this.queryString=getQuery();
to
this.queryString=getQuery;
是的,这可能不起作用,但现在它只是返回函数itself@hengecyche这是因为您在全局范围内定义了
var表单
。因此
此.form
不是引用表单构造函数的表单对象,而是引用全局定义的
var表单
当我这样做的时候。querystring=function(){}像这个console.log返回的函数querystring()@hengecyche这是因为您将函数分配给了
表单
实例的成员。当@Alexander提到这样做是为了解决您的问题时,他的意思是您调用
this.queryString
而不是
getQuery
Form.prototype.getQuery = function () {
    // ...place your logic here...
}