Javascript 无法使用';调用方法;这';同一类的另一个方法中的关键字

Javascript 无法使用';调用方法;这';同一类的另一个方法中的关键字,javascript,jquery,Javascript,Jquery,我试图在用户提交表单后传递警报。html是这样的 <form id="profile" name="profile"> <label for="firstName">Male</label> <input type="text" name="firstname" id="firstName" maxlength="20" class="required" value=""/> <input type="submit" name="

我试图在用户提交表单后传递警报。html是这样的

<form id="profile" name="profile">
  <label for="firstName">Male</label>
  <input type="text" name="firstname" id="firstName" maxlength="20" class="required" value=""/>
  <input type="submit" name="sumit" value="submit"/>
</form>
当我得到一个错误,说..this.test不是一个函数。。。
如果我只是在e.preventDefault()之后传递警报,但它不能调用,我就不能通过关键字“this”调用方法。这让我说我的范围不对。我缺少什么?

在JavaScript中,this的值基于作用域。每次有
function(){}
,就有了一个新的作用域。在每个函数中,
这个
将是不同的,它是根据调用该函数的方式设置的

在执行
this.test()
this
不是
表单
对象,而是
#profile
元素。您需要将
这个
值保存到一个变量中,以便在事件中使用它

Form.prototype.formValidate = function($form){
    var self = this;

    $form.on('submit', function(e){
        e.preventDefault();
        self.test();
    });
};

在JavaScript中,
this
的值基于作用域。每次有
function(){}
,就有了一个新的作用域。在每个函数中,
这个
将是不同的,它是根据调用该函数的方式设置的

在执行
this.test()
this
不是
表单
对象,而是
#profile
元素。您需要将
这个
值保存到一个变量中,以便在事件中使用它

Form.prototype.formValidate = function($form){
    var self = this;

    $form.on('submit', function(e){
        e.preventDefault();
        self.test();
    });
};

对..我可以在$form.on()之外调用它,因为那时你在
form
对象的函数中。一旦进入活动,您就处于一个新的上下文中,
已更改。这就是为什么您需要将其保存为变量,然后在事件中访问该变量。对..我可以在$form之外调用它。on()@soum:没错,因为当时您在
表单
对象的函数中。一旦进入活动,您就处于一个新的上下文中,
已更改。这就是为什么需要将其保存为变量,然后在事件中访问该变量。