可以创建JavaScript对象';s的子引用本身?

可以创建JavaScript对象';s的子引用本身?,javascript,circular-reference,cyclic-reference,Javascript,Circular Reference,Cyclic Reference,我有一个JavaScript对象Team和一个Score,它们表示积分和一些其他函数。我想知道在将分数存储在团队中的同时将团队存储在分数中是否安全 var Score = function(team){ this.team = team; this.points = 0; ... } var team = { name : 'Team 1', } team.score = new Score(team); 其结果是,如果我记录team.score.team.s

我有一个JavaScript对象
Team
和一个
Score
,它们表示积分和一些其他函数。我想知道在将分数存储在团队中的同时将团队存储在分数中是否安全

var Score = function(team){
    this.team = team;
    this.points = 0;
    ...
}

var team = {
    name : 'Team 1',
}
team.score = new Score(team);
其结果是,如果我记录
team.score.team.score.team.score.team.score.team.score.score.points
=0。这对于我正在编程的东西来说是完美的,但是它是否代表了一种危险的设置,可能会使旧浏览器崩溃或导致任何其他问题?它看起来就像一个无限循环,但Chrome似乎处理得很好

有什么理由不让我这么做吗

var Score = function(team,point){
    this.team = team;
    this.points = 0;
    ...
}

var team = {
    name : 'Team 1',
   point : 'point'
}
team.score = new Score(team);
team.score = new Score(point);
试试这个,也许它能帮你


试试这个,也许它能帮你

顺便提一句好问题

这称为循环引用

这表示您正在创建同一对象的嵌套引用

浏览器中的垃圾回收:浏览器中垃圾回收器的主要功能是在对象占用的内存不再使用时释放内存。但是在循环引用的情况下

如果一个对象有一个 访问后者(隐式或显式)。例如, JavaScript对象具有对其原型(隐式)的引用 引用)及其属性值(显式引用)

(来源)


这迫使垃圾收集算法防止对象被垃圾收集,这反过来又是内存泄漏

因此,MDN在循环引用的环境中得到了改进,该环境具有足够的智能,可以删除此类对象

循环引用是IE<8中的一个问题,它导致IE浏览器在这个问题上陷入混乱。读这个和这个


IBM

本文通过示例和对该主题的清晰说明了JavaScript循环引用内存泄漏



最终结论:最好避免循环引用对象,仅在程序员认为非常需要时使用。虽然现代浏览器的构建效率很高,但作为开发人员,编写导致不必要的内存消耗和泄漏的代码并不是一个好的做法

顺便提一下,这是个好问题

这称为循环引用

这表示您正在创建同一对象的嵌套引用

浏览器中的垃圾回收:浏览器中垃圾回收器的主要功能是在对象占用的内存不再使用时释放内存。但是在循环引用的情况下

如果一个对象有一个 访问后者(隐式或显式)。例如, JavaScript对象具有对其原型(隐式)的引用 引用)及其属性值(显式引用)

(来源)


这迫使垃圾收集算法防止对象被垃圾收集,这反过来又是内存泄漏

因此,MDN在循环引用的环境中得到了改进,该环境具有足够的智能,可以删除此类对象

循环引用是IE<8中的一个问题,它导致IE浏览器在这个问题上陷入混乱。读这个和这个


IBM

本文通过示例和对该主题的清晰说明了JavaScript循环引用内存泄漏



最终结论:最好避免循环引用对象,仅在程序员认为非常需要时使用。虽然现代浏览器的构建效率很高,但作为开发人员,编写导致不必要的内存消耗和泄漏的代码并不是一个好的做法

我相信这是相当普遍的做法!:)但不会被字符串化为JSON。循环方面很好。请参阅
window.document.defaultView.document.defaultView
等。如果您的代码有效,并且问题的目标是优化/改进,请将其发布。在浏览器中使用时,这是可以的,但在向服务器发送此类信息时会出现问题。我认为不同的服务器-不同的问题。我在asp mvc 5中遇到了问题。我已经用定制的
ModelBinder
解决了这些问题,但我花了很多时间,现在我总是尽量不在数据定义中使用无限循环。另外,在将这种结构保存到DB时,我还有一个问题。我相信这是非常常见的做法!:)但不会被字符串化为JSON。循环方面很好。请参阅
window.document.defaultView.document.defaultView
等。如果您的代码有效,并且问题的目标是优化/改进,请将其发布。在浏览器中使用时,这是可以的,但在向服务器发送此类信息时会出现问题。我认为不同的服务器-不同的问题。我在asp mvc 5中遇到了问题。我已经用定制的
ModelBinder
解决了这些问题,但我花了很多时间,现在我总是尽量不在数据定义中使用无限循环。另外,在将这种结构保存到DB时,我还有一个问题。欢迎使用SO!一个好的答案是,它不仅给出了可验证的例子,而且还解释了你改变了什么以及为什么。这不仅有助于OP,也有助于每个人学习。谢谢你的建议Rajesh:)下次我会处理好的欢迎来到SO!一个好的答案是,它不仅给出了可验证的例子,而且还解释了你改变了什么以及为什么。这不仅有助于OP,也有助于每个人学习一些东西。谢谢你的建议Rajesh:)下次我会处理好的。很好的答案–内存泄漏是我键入无限循环时寻找的短语OP发布的代码不会在旧版中引起问题。问题只出现在涉及DOM objectsGreat answer的圆圈中——当我键入infinite loo时,内存泄漏是我要寻找的短语