繁体   English   中英

JavaScript构造函数模式和垃圾收集器

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM