我有以下js对象:
var livePage = {
delay: 1000,
loadTables: function(){
loadTable($("#vbeTable"),'getUpdateA')
loadTable($("#vbcTable"),'getUpdateB')
createAlertDialog();
},
setClicks: function(){
$(".expand").live('click',function(){
expand($(this).attr('expandvalue'));
})
$( ".launch" )
.click(function(){
newPopup('index.php',1120,550);
});
$('.edit').live('click',function(){
openColPick($(this).attr('colType'))
});
},
setRightClick: function(){
$('body').contextMenu('mainmenu', {
bindings: {
'o_o': function(t) {
thePopupWindowsMain('oo','','',220,150,'right','');
},
'o_h': function(t) {
thePopupWindowsMain('oh','','',285,385,'left','');
},
'launch_prog': function(t) {
$(".launch").click();
},
'logout': function(t){
window.top.location = 'logout.php';
}
}
});
},
setWindow: function(){
$(window)
.resize(function() {
$('body').css('height', $(this).height())
alertToCorner();
})
.scroll(function(){$(this).resize()});
$(window).resize();
},
checkLogout: function(){
$.ajax({
url: 'getLogin.php',
dataType: "html",
success: function(data){
if($.trim(data) == 'LOGOUT'){
window.location = 'logout.php';
}
},
complete: function(){
setTimeout( function () {
livePage.checkLogout();},
livePage.delay)
},
timeout: 2000
});
},
init: function(){
this.checkLogout();
this.loadTables();
this.setClicks();
this.setRightClick();
this.setWindow();
console.log(this);
}
}
由于某些原因checkLogout: function()
我必须使用livePage.delay
和livePage.checkLogout()
当我尝试使用例如this.checklogout()
时,我在Chrome的控制台中收到以下错误:
未捕获的TypeError:对象[对象 DOMWindow]没有方法'checkLogout'
我该如何解决这个问题?
谢谢!
答案 0 :(得分:5)
函数this
内部不再绑定到外面绑定的任何内容。最简单的解决方案是使用var self = this;
分配给另一个var,或者在您的情况下通过context: this
的{{1}}选项分配。
答案 1 :(得分:3)
你可以尝试,
checkLogout: function(){
var self = this; //reference to the livePage object
$.ajax({
url: 'getLogin.php',
dataType: "html",
success: function(data){
if($.trim(data) == 'LOGOUT'){
window.location = 'logout.php';
}
},
complete: function(){
setTimeout( function () {
self.checkLogout();}, //need to use self because 'this' no longer refers to livePage in this context
livePage.delay)
},
timeout: 2000
});
}
答案 2 :(得分:1)
this
在js中与在C#等语言中有很大不同。首先,它是功能范围的。其次(可能更重要的是),您可以控制调用函数时this
的内容。 (查看“call”和“apply”函数,这些函数在javascript框架中经常使用。)
答案 3 :(得分:0)
在Javascript中阅读this this keyword。在你的情况下,this
指的是像错误所说的没有方法'checkLogout'的窗口。
答案 4 :(得分:0)
您应该将context: this
属性添加到发送到$.ajax
的哈希值,然后在完整的处理程序调用{{1}}中添加。
JQuery的this.checkLogout
方法将使用ajax
作为window
上下文调用处理程序,我们可以通过向调用添加this
属性来更改它