这是我的代码 -
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/