jQuery.getJSON回调中设置的变量不保留其值

时间:2017-10-09 12:06:52

标签: javascript jquery json ajax

在我的网站中,我使用在“categories.json”文件中存储为JSON对象的类别树。它的值存储为名为“category”的对象的属性“tree”,以及一些访问它的方法。这是代码的一部分:

var category = {

    tree: {},

    // loads the tree into memory
    loadTree: function() {
        $.getJSON("categories.json", function(data) {
            this.tree = data;
            console.log("Tree loaded");
        });
    },

    // Returns an array with the children of a node
    getChildren: function(name) {
        return this.tree[name].children;
    }

    ...
}

据我所知,由于getJSON是一个异步函数,因此我作为参数传递的回调的效果不会立即发生。但是,即使在显示“Tree loaded”消息之后,每当我访问category.tree对象(即调用category.getChildren()并打印结果)时,它都是空的。

1 个答案:

答案 0 :(得分:1)

this没有提及任何内容。您在category对象内,因此,您必须引用它。

如果你在一个Class实例中,

this会有意义,但这只是一个常规对象。



var category = {

    tree: {},

    // loads the tree into memory
    loadTree: function() {
        category.tree = { foo : "bar" }
    },

    // Returns an array with the children of a node
    getChildren: function(name) {
        return category.tree
    }

}

category.loadTree()
console.log( category.getChildren() ) // { foo : "bar" }




同一个类,使用this有意义:



class Category {

	constructor(){
	     this.tree = {}	
	}
	
    // loads the tree into memory
    loadTree() {
        this.tree = { foo : "bar" }
    }

    // Returns an array with the children of a node
    getChildren(name) {
        return this.tree
    }

}

const category = new Category()
category.loadTree()
console.log( category.getChildren() )