簡體   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