gpt4 book ai didi

javascript - Javascript 中未定义的类变量

转载 作者:行者123 更新时间:2023-11-28 12:35:25 26 4
gpt4 key购买 nike

这是我的代码 -

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com