Javascript 从同一类中的另一个方法调用java脚本类中的方法

Javascript 从同一类中的另一个方法调用java脚本类中的方法,javascript,Javascript,我正在尝试创建自己的类,以便可以更轻松地进行维护,但我遇到了问题,以下是我的代码: var SonalScript = function() { console.log('instance created'); this.AjaxCall = function(url,data){ $.post(url,data,function(data,status){ alert("Data: " + data + "\nStatus: " + status);

我正在尝试创建自己的类,以便可以更轻松地进行维护,但我遇到了问题,以下是我的代码:

var SonalScript = function() {
console.log('instance created');
    this.AjaxCall = function(url,data){
      $.post(url,data,function(data,status){
            alert("Data: " + data + "\nStatus: " + status);
          });
}

this.Switches = function(ElemIdentifier) {
    $(ElemIdentifier).bootstrapSwitch();
    $(ElemIdentifier).on('switchChange.bootstrapSwitch', function(event, state) {
        //  console.log( $(this).get('name'));
        var ModuleName = $(this).attr("name");
        var name = $(this).data("name") ;
        var BtnValue = $(this).data("value") ;
        var url = $(this).data("addr") ;
        var BtnResult = '';
        if (state) {
        // data-addr
        // data-name
        // data-value
        // result = True Or False
        BtnResult = 'True';
        //  alert('Enabling : ' + ModuleName );

        } else {
         BtnResult = 'False';
        //  alert('Disabling : ' + ModuleName);
        }

      //  alert(result);

        var data = { name:BtnValue , result : BtnResult };
        console.log(data);
        console.log(url);
        this.AjaxCall(url,data); // << Problem is exactly this line

    });
  }


};

 SonalUtil = new SonalScript();

你觉得怎么样?产生错误的原因是什么?

有两种方法可以实现这一点,一种是将
this
绑定到回调函数,另一种是将
this
放入回调函数的闭包上下文中。因此,第一种方法是:

...
this.Switches = function(ElemIdentifier) {
    $(ElemIdentifier).bootstrapSwitch();
    $(ElemIdentifier).on('switchChange.bootstrapSwitch', function(event, state) {
        ...
    }.bind(this));
  }
...
第二个是

....
var self = this;
$(ElemIdentifier).on('switchChange.bootstrapSwitch', function(event, state) {
        //  console.log( $(self).get('name'));
        var ModuleName = $(self).attr("name");
        var name = $(self).data("name") ;
        var BtnValue = $(self).data("value") ;
        var url = $(self).data("addr") ;
        var BtnResult = '';
        if (state) {
        // data-addr
        // data-name
        // data-value
        // result = True Or False
        BtnResult = 'True';
        //  alert('Enabling : ' + ModuleName );

        } else {
         BtnResult = 'False';
        //  alert('Disabling : ' + ModuleName);
        }

      //  alert(result);

        var data = { name:BtnValue , result : BtnResult };
        console.log(data);
        console.log(url);
        self.AjaxCall(url,data); // << Problem is exactly this line

    });
...
。。。。
var self=这个;
$(ElemIdentifier).on('switchChange.bootstrapSwitch',函数(事件,状态){
//log($(self.get('name'));
var ModuleName=$(self.attr(“名称”);
变量名称=$(self).data(“名称”);
var BtnValue=$(自)。数据(“值”);
var url=$(self.data(“addr”);
var BtnResult=“”;
如果(州){
//数据地址
//数据名
//数据值
//结果=正确或错误
BtnResult=‘True’;
//警报(“启用:”+ModuleName);
}否则{
BtnResult=‘False’;
//警报(“禁用:”+ModuleName);
}
//警报(结果);
var data={name:BtnValue,result:BtnResult};
控制台日志(数据);
console.log(url);

self.AjaxCall(url,data);//您不是从
Switches
方法调用
AjaxCall
,而是从
switchChange.bootstrapSwitch
回调函数调用,第二个更好。工作正常。
....
var self = this;
$(ElemIdentifier).on('switchChange.bootstrapSwitch', function(event, state) {
        //  console.log( $(self).get('name'));
        var ModuleName = $(self).attr("name");
        var name = $(self).data("name") ;
        var BtnValue = $(self).data("value") ;
        var url = $(self).data("addr") ;
        var BtnResult = '';
        if (state) {
        // data-addr
        // data-name
        // data-value
        // result = True Or False
        BtnResult = 'True';
        //  alert('Enabling : ' + ModuleName );

        } else {
         BtnResult = 'False';
        //  alert('Disabling : ' + ModuleName);
        }

      //  alert(result);

        var data = { name:BtnValue , result : BtnResult };
        console.log(data);
        console.log(url);
        self.AjaxCall(url,data); // << Problem is exactly this line

    });
...