欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

构造函数中的this与jq中的this冲突解决方法

程序员文章站 2022-04-12 08:10:30
通常我们写构造函数都是这样写// 文件构造函数 业务类function File(json,popupWindowShow,recordFilePath){//这里的this是指向构造函数本身 this._json = json; //客户端传入的数据 this.popupWindowShow = popupWindowShow; this.recordFilePath = recordFilePath;}// 获取用户设置信息File.prototype.getUser...

通常我们写构造函数都是这样写

// 文件构造函数   业务类
function File(json,popupWindowShow,recordFilePath){
	//这里的this是指向构造函数本身
  this._json = json;   //客户端传入的数据
  this.popupWindowShow = popupWindowShow;
  this.recordFilePath = recordFilePath;
}
// 获取用户设置信息
File.prototype.getUser = function(){
  fileAdress = JSON.parse(this._json.data).LocalFilesPath    //将获取到的地址赋值到全局变量
}
// 新建文件
File.prototype.fileCreate = function(){
  // alert("weige")
}
// 获取本地数据
File.prototype.getLocalFile = function(){
  var localFileList = JSON.parse(this._json.data).LocalFiles;
  baseLocalFile = localFileList;  //用来排序的本地文件数据
  var onlineFileList = JSON.parse(this._json.data).DownloadFiles;
  baseDownFile = onlineFileList;   //用来排序的云下载文件数据
  if(getLocalFileFlag==1){   //为1则渲染数据
    // 样式一数据填充
    $(".file_list_first_local").append(commonFunc.dealFileListOne(localFileList));
    $(".file_list_first_online").append(commonFunc.dealFileListOne(onlineFileList));
    // 样式二数据填充
    $(".file_list_second_local").append(commonFunc.dealFileListTwo(localFileList));
    $(".file_list_second_online").append(commonFunc.dealFileListTwo(onlineFileList));
  }
}

这样是不会冲突的,但是下面这种情况就存在冲突的问题

// 重命名
File.prototype.fileRename = function(){
  // 重命名成功
  if(this._json.data=="false"){
    commonFunc.errorToast(this._json.des)
  }else{
    $(".file_list_wrap ul li").each(function(){
      if($(this).attr("data-path")==this.recordFilePath){
        $(this).find(".file_name").text(JSON.parse(this._json.data).value);
        $(this).attr("data-path",JSON.parse(this._json.data).path);
        // 成功关闭弹窗
        $(".file_container_box .maskClose").click();
        commonFunc.successToast("重命名成功")
        wc_call(JSON.stringify(mainJson.getLocalFile)); //重新更新数据
      }
    })
  }
}
// 文件删除
File.prototype.fileDelete = function(){
  if(this._json.data=="false"){
    commonFunc.errorToast(this._json.des)
  }else{
    $(".file_list_wrap ul li").each(function(){
      if($(this).attr("data-path")==this.recordFilePath){
        $(this).remove();
        // 成功关闭弹窗
        $(".file_container_box .maskClose").click();
        commonFunc.successToast("删除成功")
        wc_call(JSON.stringify(mainJson.getLocalFile));//重新更新数据
      }
    })
  }
}

这个时候我们就需要另外创建一个变量来接收构造函数的this,避免与jq中的this冲突

// 文件构造函数   业务类
var that;   //接收构造函数中的this
function File(json,popupWindowShow,recordFilePath){
  this._json = json;   //客户端传入的数据
  this.popupWindowShow = popupWindowShow;
  this.recordFilePath = recordFilePath;
}

然后把原型链上的方法中的this改为that就可以了

本文地址:https://blog.csdn.net/qq_35168861/article/details/109381556

相关标签: javascript jquery