[英]Javascript constructor pattern and garbage collector
我在基于Durandal的SPA中使用以下构造函数。 (我也在Durandal谷歌小组中问过这个问题,目前还没有答复)。 当用户导航到页面时,Durandal框架控制此视图模型的“新”设置。
function () {
var ctor = function () {
this.arr1 = [];
var arr2 = [];
this.getData = function () {
for (i = 0; i < 1000000; i++) {
this.arr1.push ({ empName: "mike", empAge: 30, empTitle: 'Senior Software Engineer' });
arr2.push ({ empName: "mike", empAge: 30, empTitle: 'Senior Software Engineer' });
}
alert("done");
}
};
return ctor;
});
单击视图上的按钮将触发getData。 填充数组并导航离开后,arr1中的对象将被垃圾回收。 arr2中的对象不是。
我正在尝试使用“ var”而不是“ this”,因为我读了一些有关在这种模式下创建私有变量的文章。 混合“ var”和“ this”是否有不利之处?
JS GC是否应该清理这两个阵列? 如果是的话,那么我可以把更多的精力放在杜兰达尔身上。
测试是使用Chrome开发者工具中的个人资料完成的
一旦包含对象可用于GC,则垃圾收集器将清理您的数据,无论它是在本地(例如私有)变量中还是在实例变量中。 从那个角度看,它并没有什么不同。
私有变量是有用的并且是完全可接受的编码方式。 它们要求在构造函数中定义所有访问它们的方法,就像定义了.getData()
方法一样。 您不能将原型用于需要访问构造函数中定义的私有变量的方法,因为原型上的方法在不同的范围内。
您可以在此处阅读有关私有成员变量设计模式的更多信息: http : //javascript.crockford.com/private.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.