Javascript 通过';这';作为参数

Javascript 通过';这';作为参数,javascript,object,garbage-collection,this,Javascript,Object,Garbage Collection,This,想象我做了这样的事情: Obj1的实例将添加到全局应用程序对象内的命名空间部分 APP.namespace.obj = new Obj1(); 从Obj1构造函数中,我实例化了另一个对象,如下所示: var var1 = new Obj2({someobj: this}); 这是作为参数传递的(指向obj1)。 在Obj2中,我将传递的对象设置为属性: This.someobj = options.someobj; 它允许我在Obj1上调用原型方法。 这些对象中有没有垃圾被收集过?

想象我做了这样的事情:

Obj1的实例将添加到全局应用程序对象内的命名空间部分

APP.namespace.obj = new Obj1(); 
从Obj1构造函数中,我实例化了另一个对象,如下所示:

var var1 = new Obj2({someobj: this}); 
这是作为参数传递的(指向obj1)。 在Obj2中,我将传递的对象设置为属性:

This.someobj = options.someobj;  
它允许我在Obj1上调用原型方法。 这些对象中有没有垃圾被收集过? 当我不再需要它们中的任何一个时,我如何销毁这些对象

我这样做的范围是制作可以在视图(obj2)上操作的控制器(obj1)。

但是我想委托管理其他视图的方法,以及从控制器(obj1)到后端的调用

据我所知,只要
APP.namespace.obj
存在,它们就不能被垃圾收集


可能在视图和控制器之间使用发布/订阅模式(观察者模式)。这样就可以消除紧耦合。

考虑到这是一个单页应用程序,我可以看出这是一件多么糟糕的事情。当一个人将其全局应用程序对象命名为主干中的模型/视图时,我认为随着时间的推移,它注定会过载。这可能是对的吗?嗯,据我所知,
主干网不适合长期使用的单页应用程序,因为它很难拥有干净的内存。相反,
Ember.js
ExtJs
提供了一种编程模型,可以防止内存问题,并为您提供大部分内存管理。也许研究一下他们是如何解决这个问题的会对你有所帮助。如果单页应用程序注定不能长时间运行,那么在我看来,内存不应该是那么大的问题。嗯,那很糟糕。它应该运行很长时间。对于Pub Sub,我认为我可能会面临同样的问题,但我将研究这个话题,而不是搜索“代码> EMB.JS VS ANGARLUS JS与VBRANCE。JS<代码>在谷歌上,您应该对每个框架的+/-进行一个很好的概述,并告诉您在选择它时要考虑什么。我个人使用
ExtJs
,他们使用
pub/sub系统来解决这个问题。此外,控制器还具有对视图和模型的引用,但并非相反。在
ember.js
中,如果我记得清楚的话,他们使用的是生命周期系统。