javascript - Javascript 中未定义的类变量

标签 javascript jquery

这是我的代码 -

function searchString(usrLogin) {

  var setUsrLogin = function (usrLogin) {
    this.usrLogin = (usrLogin == "") ? "*" : usrLogin;
  }


  this.toString = function(){
    return 'source="dbmon-dump://Source/ID" ' + 'USR_LOGIN="' + this.usrLogin + '" ';
  }

  setUsrLogin(usrLogin);
}

$(function() {
  var a = new searchString("");
  $('#searchBar').val(a.toString());
});

a.toString() 打印 source="dbmon-dump://Source/ID"USR_LOGIN="undefined"因为 this.usrLogin 显示为未定义。我做错了什么?

最佳答案

当您调用 setUsrLogin(usrLogin); 时,您将丢失 this context 。事实上,您为其分配 usrLogin 属性的 this 是全局对象。

要解决此问题,

  • 只需删除该函数调用并直接设置即可:

    function searchString(usrLogin) {
        this.usrLogin = (usrLogin == "") ? "*" : usrLogin;
        this.toString = function(){
            return 'source="dbmon-dump://Source/ID" ' + 'USR_LOGIN="' + this.usrLogin + '" ';
        }
    }
    
  • 或将实例作为参数传递。要么

    function setUsrLogin(usrLogin) {
        this.usrLogin = (usrLogin == "") ? "*" : usrLogin;
    }
    // and then
    setUsrLogin.call(this, usrLogin);
    

    function setUsrLogin(search, usrLogin) {
        search.usrLogin = (usrLogin == "") ? "*" : usrLogin;
    }
    // and then
    setUsrLogin(this, usrLogin);
    

顺便说一句,您可以移动 toString 函数 to the prototype object :

function SearchString(usrLogin) {
   this.usrLogin = (usrLogin == "") ? "*" : usrLogin;
}
SearchString.prototype.toString = function() {
    return 'source="dbmon-dump://Source/ID" ' + 'USR_LOGIN="' + this.usrLogin + '" ';
};
var a = new SearchString("");

关于javascript - Javascript 中未定义的类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17572101/

相关文章:

javascript - 使用 javascript 更改表行名称属性

javascript - 调用函数时开始旋转并在函数结束时停止的微调器按钮

javascript - 当 div 内容越来越多时,让它平滑变大

javascript - 当我们将原始字符串分配给对象字符串时,为什么 TypeScript 不显示错误?

javascript - 禁用输入字段中的某些字符

jquery - 获取 <video> 的原始尺寸

javascript - 在 Kendo Angular DatePicker 中禁用 future 日期

javascript - 在页面导航上使用pace.js进度条

javascript - 在 span 中对 textchange 调用函数

javascript - 抓取 HTML(或 JavaScript)表