Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
删除对象';在JavaScript中,在object的函数中引用自身_Javascript_Object_Reference_Reference Cycle - Fatal编程技术网

删除对象';在JavaScript中,在object的函数中引用自身

删除对象';在JavaScript中,在object的函数中引用自身,javascript,object,reference,reference-cycle,Javascript,Object,Reference,Reference Cycle,我想通过从对象集合中移除对象本身的函数。若我像下面这样编写代码,那个么它会指向引用循环或任何其他错误 const obj_collec={}; 功能对象(id){ 这个.id=id; this.remove=function(){ 删除对象集合[this.id] } } obj_collec['obj1']=新obj('obj1'); 控制台日志(obj_collec) obj_collec['obj1'].移除(); log(obj_collec)“但是我想知道如果我像上面那样编码会发生什么

我想通过从对象集合中移除对象本身的函数。若我像下面这样编写代码,那个么它会指向引用循环或任何其他错误

const obj_collec={};
功能对象(id){
这个.id=id;
this.remove=function(){
删除对象集合[this.id]
}
}
obj_collec['obj1']=新obj('obj1');
控制台日志(obj_collec)
obj_collec['obj1'].移除();

log(obj_collec)
“但是我想知道如果我像上面那样编码会发生什么。”没有什么特别的。它只是工作。这是一个有点奇怪的代码,但在语法和功能上都没问题。它只会将对象从
obj_colec
中删除,并使其符合正常的垃圾收集条件。@VLAZ它不会导致引用循环吗?为什么会这样?您正在调用
delete obj_collec['obj1']
,就这样。当方法执行时,对象实例仍被引用,但当堆栈清除时(在方法结束后),就不再有对该对象的其他引用了。@VLAZ感谢您的解释。我现在明白了。你期望什么样的参考周期,这会有什么问题?当然,如果没有
remove
方法,
newobj
将不会引用它所属的
Obj\u collect
,但我不知道这有什么关系。“但我想知道,如果我像上面那样编码会发生什么。”没有什么特别的。它只是工作。这是一个有点奇怪的代码,但在语法和功能上都没问题。它只会将对象从
obj_colec
中删除,并使其符合正常的垃圾收集条件。@VLAZ它不会导致引用循环吗?为什么会这样?您正在调用
delete obj_collec['obj1']
,就这样。当方法执行时,对象实例仍被引用,但当堆栈清除时(在方法结束后),就不再有对该对象的其他引用了。@VLAZ感谢您的解释。我现在明白了。你期望什么样的参考周期,这会有什么问题?当然,如果没有
remove
方法,
newobj
将不会引用它所属的
Obj\u collect
,但我不知道这有什么关系。