这是我的代码-
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。实际上,为其分配this
属性的usrLogin
是全局对象。
要解决此问题,
只需删除该函数调用并直接进行设置即可:
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("");