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
});
...