JavaScript函数引用深度限制

JavaScript函数引用深度限制,javascript,Javascript,我想知道JavaScript是否有任何功能深度限制。我这样问是因为我正在处理一个复杂的应用程序,不幸的是,我们无法更改数据结构 例如,如果我尝试引用一个变量,例如: Thi.sIs.An.Except.ionally[345].long.unct.ional[z].reference.tence.Thats[23].Sev.eral.Lay.ers[96].Deep 如果Deepstruct及其成员位于同一窗口中,我有时可以设置并获取其值,但如果我将此元素包含在另一个类中,或者尝试从另一个页面引

我想知道JavaScript是否有任何功能深度限制。我这样问是因为我正在处理一个复杂的应用程序,不幸的是,我们无法更改数据结构

例如,如果我尝试引用一个变量,例如:

Thi.sIs.An.Except.ionally[345].long.unct.ional[z].reference.tence.Thats[23].Sev.eral.Lay.ers[96].Deep

如果
Deep
struct及其成员位于同一窗口中,我有时可以设置并获取其值,但如果我将此元素包含在另一个类中,或者尝试从另一个页面引用它并设置Deep的成员,那么Deep稍后会为其每个成员返回null或undefined。浏览器没有抛出错误,我只是得到了意外的行为

编辑:我想添加,我正在尝试从嵌套框架中引用
Deep
,至少在同一域的三个级别。例如,框架需要在框架
课程
中引用
深度
,从主框架向下两层,但在需要访问它的框架的独立分支上。我们继承的应用程序使用框架,但这些框架可以更改为iFrame。将这些更改为iFrame也会起作用吗

parent.Topic.Course.Thi.sIs.An.Except.ionally[345].LongF.unct.ional[z].Refer.ence.Thats[23].Sev.eral.Lay.ers[96].Deep

这里有我遗漏的东西吗?还是JavaScript功能深度的某种参考?

对于嵌套对象的距离似乎没有任何限制(或者如果有,那么嵌套对象的距离会非常高)。此代码运行良好(注意,我在chrome中测试了此代码):

var-ctr=1,obj={};
而(ctr<1000000){//100万
obj=obj.obj={};ctr++;
};

我觉得你的问题与你试图“从另一个页面”访问此内容有关。您可以发布与此相关的代码吗?

对于嵌套对象的距离似乎没有任何限制(或者如果有,那么嵌套对象的距离高得离谱)。此代码运行良好(注意,我在chrome中测试了此代码):

var-ctr=1,obj={};
而(ctr<1000000){//100万
obj=obj.obj={};ctr++;
};
我觉得你的问题与你试图“从另一个页面”访问此内容有关。您能发布与此相关的代码吗?

Javascript中依赖于特定设计实现的嵌套对象不应有固有的限制。它应该取决于Javascript运行时可用的内存量

Javascript对象具有属性。如果您有一个23级的深层层次结构
foo.bar.baz.qux[23].figaro.figaro.figaro…
,那么顶级对象“看到”的唯一内容就是它的直接子属性:
foo
有一个本身就是对象的属性
bar
foo.bar
中包含的值不会以任何方式影响
foo
。(从
foo
的角度来看,它是一个对象引用,就像C中的指针一样。)同样,对象
foo.bar
有一个子属性
baz
,它本身就是一个对象

请注意,在属性访问中可以有循环,因此从技术上讲,可以有无限级别的“嵌套”。下面是JSDB javascript shell中的一个示例,其中对象
foo
bar
都具有另一个属性:

js>foo = {}
[object Object]
js>foo.foo = foo
[object Object]
js>foo.foo.foo.foo.foo
[object Object]
js>foo = {x: 1}
[object Object]
js>bar = {y: 2}
[object Object]
js>foo.bar = bar
[object Object]
js>bar.foo = foo
[object Object]
js>foo.bar.foo.bar.foo.bar.foo.bar.foo.bar.y
2
这些对象无法在JSON中序列化,因为它们具有引用周期


如果遇到的限制不是内存问题,则不是核心语言的问题,而是浏览器中遇到的对象模型的某些方面的问题。(例如,如果对象模型是用C或Java实现的,并且暴露于Javascript中,则C/Java实现中可能存在错误或“怪癖”)

Javascript中的嵌套对象不应有依赖于特定设计实现的固有限制。它应该取决于Javascript运行时可用的内存量

Javascript对象具有属性。如果您有一个23级的深层层次结构
foo.bar.baz.qux[23].figaro.figaro.figaro…
,那么顶级对象“看到”的唯一内容就是它的直接子属性:
foo
有一个本身就是对象的属性
bar
foo.bar
中包含的值不会以任何方式影响
foo
。(从
foo
的角度来看,它是一个对象引用,就像C中的指针一样。)同样,对象
foo.bar
有一个子属性
baz
,它本身就是一个对象

请注意,在属性访问中可以有循环,因此从技术上讲,可以有无限级别的“嵌套”。下面是JSDB javascript shell中的一个示例,其中对象
foo
bar
都具有另一个属性:

js>foo = {}
[object Object]
js>foo.foo = foo
[object Object]
js>foo.foo.foo.foo.foo
[object Object]
js>foo = {x: 1}
[object Object]
js>bar = {y: 2}
[object Object]
js>foo.bar = bar
[object Object]
js>bar.foo = foo
[object Object]
js>foo.bar.foo.bar.foo.bar.foo.bar.foo.bar.y
2
这些对象无法在JSON中序列化,因为它们具有引用周期



如果遇到的限制不是内存问题,则不是核心语言的问题,而是浏览器中遇到的对象模型的某些方面的问题。(例如,如果对象模型是用C或Java实现的,并且暴露于Javascript中,则C/Java实现中可能存在错误或“怪癖”)

可能存在@ChristianVarga的副本,该副本是您链接到的蹩脚副本。答案基本上是一个问题。“尝试从另一个页面引用它”在弹出窗口或Iframe中的另一个页面?@epascarello该问题询问的是最大嵌套级别,我的评论中的答案表示没有最大嵌套级别。如果这不是一个直接问题的直接答案,我不知道这是什么。@epascarello-我还是不喜欢这个问题被人愚弄。一个人不受支持的评论“没有最高级别”不应该被视为所有JS实现的全局事实,即使它是正确的(我不知道)。我在chrome上测试了它,它至少有100万,但这并不意味着无限。就这个问题而言,另一个问题基本上以“你的cod”结尾