jQuery中嵌套对象类的全局变量

时间:2011-07-04 11:05:38

标签: javascript oop jquery

所以我的js文件中有以下结构:

var scrollingElements = {

    doc_height :    null,
    window_height : null,

    globalVar : {
        init: function() {
            //Get window and document initial heights
            this.doc_height     = $(document).height();
            this.window_height  = $(window).height();
        }
    },

    headerNav : {
        init: function(){
            console.log(this.doc_height);
        }
    },

    quickNavSidebar : {
        init: function(){
            console.log(this.doc_height);
        }
    }

}

$(function(){
    scrollingElements.globalVar.init();
    scrollingElements.headerNav.init();
    scrollingElements.quickNavSidebar.init();
});

但是,此代码不起作用。 this.window_height未达到对象类中的正确级别。我不确定如何到达更高级别以存储和访问全局变量。我想我需要做this.parent()之类的事情,但显然这不起作用:/

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

你不能在对象内部使用它来引用你所做的变量。它们是对象的属性,可以直接访问对象内部。 这对我有用:

var scrollingElements = {

    doc_height :    null,
    window_height : null,

    globalVar : {
        init: function() {
            //Get window and document initial heights
            doc_height     = $(document).height();
            window_height  = $(window).height();
            console.log(doc_height);
        }
    },

    headerNav : {
        init: function(){
            console.log(doc_height);
        }
    },

    quickNavSidebar : {
        init: function(){
            console.log(doc_height);
        }
    }

}

答案 1 :(得分:1)

您需要保存对封闭类的引用。尝试阅读Javascript closures

var scrollingElements = {

    doc_height :    null,
    window_height : null,
    that: this,

    globalVar : {
        init: function() {
            //Get window and document initial heights
            that.doc_height     = $(document).height();
            that.window_height  = $(window).height();
        }
    },

    headerNav : {
        init: function(){
            console.log(that.doc_height);
        }
    },

    quickNavSidebar : {
        init: function(){
            console.log(that.doc_height);
        }
    }

}