在我的网站中,我使用在“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()并打印结果)时,它都是空的。
答案 0 :(得分:1)
this
没有提及任何内容。您在category
对象内,因此,您必须引用它。
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() )