Javascript 如何在另一个键/值对中使用已定义的键
我有一个javascript对象:Javascript 如何在另一个键/值对中使用已定义的键,javascript,json,object,Javascript,Json,Object,我有一个javascript对象: return { AccDocs: { query: function() { ... }, deleteAndQuery: function() { ... AccDocs.query(); //Error: AccDocs is not defined } } } 但是,它返回一个错误,表示未定义AccDocs 如何实现这样的目标?使用thi
return {
AccDocs: {
query: function() {
...
},
deleteAndQuery: function() {
...
AccDocs.query(); //Error: AccDocs is not defined
}
}
}
但是,它返回一个错误,表示未定义AccDocs
如何实现这样的目标?使用
this
关键字:
return {
AccDocs: {
query: function() {
...
},
deleteAndQuery: function() {
...
this.query(); //Here
}
}
}
this.query();
通过使用
此
关键字:
return {
AccDocs: {
query: function() {
...
},
deleteAndQuery: function() {
...
this.query(); //Here
}
}
}
this.query();
对象上的变量和属性是不同的。如果不指定要访问的对象,则无法访问对象的属性 您可能可以使用
this
关键字访问它:
return {
AccDocs: {
query: function() {
...
},
deleteAndQuery: function() {
...
this.query(); //Here
}
}
}
this.query();
请记住,this
的值将(当a.b.c.d.AccDocs.deleteAndQuery()时)
被调用,这个内部的删除和查询
将是AccDocs
,因为它是最后一个
左边的第一个对象,但是如果您首先将查询
复制到另一个变量,然后调用查询()
,将其传递到设置超时
,或者如果要使用调用
或应用
,则此
的值将更改)
为了获得更高的健壮性(但灵活性较低,因为能够更改上下文可能很有用),您可以将对象存储在一个可以通过名称访问的变量中
var AccDocs = {
query: function() {
...
},
deleteAndQuery: function() {
...
AccDocs.query();
}
};
return { AccDocs: AccDocs };
对象上的变量和属性是不同的。如果不指定要访问的对象,则无法访问对象的属性
您可能可以使用this
关键字访问它:
return {
AccDocs: {
query: function() {
...
},
deleteAndQuery: function() {
...
this.query(); //Here
}
}
}
this.query();
请记住,this
的值将(当a.b.c.d.AccDocs.deleteAndQuery()时)
被调用,这个内部的删除和查询
将是AccDocs
,因为它是最后一个
左边的第一个对象,但是如果您首先将查询
复制到另一个变量,然后调用查询()
,将其传递到设置超时
,或者如果要使用调用
或应用
,则此
的值将更改)
为了获得更高的健壮性(但灵活性较低,因为能够更改上下文可能很有用),您可以将对象存储在一个可以通过名称访问的变量中
var AccDocs = {
query: function() {
...
},
deleteAndQuery: function() {
...
AccDocs.query();
}
};
return { AccDocs: AccDocs };
顺便说一句,你要创建循环引用
@ozil-这不会创建循环引用,即使它创建了:那又怎样?没有迹象表明任何代码将尝试递归处理它。顺便说一下,您将创建循环引用@ozil-这不会创建循环引用,即使它创建了循环引用:那又怎样?没有迹象表明任何代码将试图递归地处理它。@RomanPerekhrest-当然它将返回未定义的,其中没有返回语句。我怀疑您的意思是this.query
的值将未定义。这是可能的,但取决于函数的调用方式。给定调用它的最可能的代码,它将正常工作,此
将是AccDocs
属性的值。典型情况是调用something.AccDocs.deleteAndQuery()
(例如,与something.AccDocs.deleteAndQuery.call(something)
相反)@RomanPerekhrest-当然它将返回未定义的,其中没有返回语句。我怀疑您的意思是this.query
的值将未定义。这是可能的,但取决于函数的调用方式。给定最有可能调用它的代码,它将正常工作,此
将是AccDocs
属性的值。典型情况是调用something.AccDocs.deleteAndQuery()
(例如,与something.AccDocs.deleteAndQuery.call(something)
)相反,该死。好的,你今天赢了。我将删除我的帖子。今天不是我的幸运日该死的。好的,你今天赢了。我将删除我的帖子。今天不是我的幸运日