Javascript 在js对象中使用“this”
我有以下js对象:Javascript 在js对象中使用“this”,javascript,jquery,object,this,Javascript,Jquery,Object,This,我有以下js对象: var livePage = { delay: 1000, loadTables: function(){ loadTable($("#vbeTable"),'getUpdateA') loadTable($("#vbcTable"),'getUpdateB') createAlertDialog(); }, setClicks: function(){ $(".expand").
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的控制台中遇到以下错误:
未捕获类型错误:对象[对象]
DOMWindow]没有“checkLogout”方法
我该如何解决这个问题
谢谢 仔细阅读Javascript。在您的例子中,
这个
指的是一个窗口,正如错误所说,它没有“checkLogout”方法。请阅读Javascript。在您的情况下,此
指的是一个窗口,如错误所示,该窗口没有“checkLogout”方法。函数内部此
不再绑定到它绑定到外部的任何对象。最简单的解决方案是使用var self=this分配给另一个var
或在您的情况下,通过上下文传递它:函数内部$.ajax()
的这个选项不再绑定到它绑定到外部的任何对象。最简单的解决方案是使用var self=this分配给另一个var
或者在您的情况下,通过上下文传递它:这是$.ajax()
的选项,您可以尝试
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
});
}
你可以试试
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
});
}
您应该在发送到$.ajax
的散列中添加上下文:此属性,然后在完整的处理程序调用中添加此属性。检查注销
发生的情况是JQuery的ajax
方法将使用窗口
作为此
上下文调用处理程序,我们可以通过向调用中添加上下文
属性来改变这一点。您应该向发送到$.ajax
的散列中添加上下文:此
属性,然后在完整的处理程序调用中选择此项。请检查注销
发生的情况是,JQuery的ajax
方法将使用窗口
作为this
上下文调用处理程序,我们可以通过在调用中添加context
属性来改变这一点。this
在js中与在C#等语言中有很大不同。首先,它是函数范围的。其次(可能更重要的是),您可以控制调用函数时此
将是什么。(查看javascript框架中经常使用的“call”和“apply”函数。)这在js中与在C#等语言中有很大不同。首先,它是函数范围的。其次(可能更重要的是),您可以控制调用函数时此
将是什么。(查看javascript框架中经常使用的“call”和“apply”函数。)这很有效:-)我添加了var self=this代码>到checkLogout()
fn的顶部,我使用self而不是this
Thank^ ^this worked:-)我添加了var self=this
到checkLogout()
fn的顶部,我使用self而不是this
谢谢^_^