Javascript 在js对象中使用“this”

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").

我有以下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的控制台中遇到以下错误:

未捕获类型错误:对象[对象] 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
谢谢^_^