2017-03-07 81 views
1

在這裏,我有這兩個代碼:如何在封閉內製作原型?

var mod = function() { 
    var a = function() { 
     this.fucname = 'hello'; 
    }; 

    a.prototype.build = function() { 
     return 'before '+this.fucname; 
    }; 

    return new a(); 
}; 

for(var i=0; i<10000; i++){ 
    var newfuc = mod(); 
}; 

var a = function() { 
    this.fucname = 'hello'; 
}; 

a.prototype.build = function() { 
    return 'before '+this.fucname; 
}; 

for(var i=0; i<10000; i++){ 
    var newfuc = new a(); 
}; 

我在Chrome瀏覽器開發同時檢查之後,第二個代碼採取JS HEAP 3.0MB, 第一碼取JS HEAP 10MB。

是意思,構建功能已創建10000在第一時間碼?以及如何在不移除封面的情況下對其進行改進?

我要的東西傳遞到功能...

+0

無論是'build'和'了'功能,是的。正在調用一個「模塊」10,000倍的實際情況,你將不得不處理? (另請注意,這不是一個內存泄漏,只是一些過度消費。) – Ryan

+0

是的,我也有到裏面通過一些變量,而無需取下蓋子「國防部」 – user3769916

+0

因此改變你的代碼,以便有一個'mod'功能是有道理的。 – zerkms

回答

2

如果你想隱藏的構造函數,但也只有一次評價它,你可以使用一個IIFE的創建一個新的範圍:

var mod = (function() { 
    var a = function() { 
    this.fucname = 'hello'; 
    }; 

    a.prototype.build = function() { 
    return 'before ' + this.fucname; 
    }; 

    return function() { 
    return new a(); 
    }; 
})(); 

for (var i = 0; i < 10000; i++) { 
    var newfuc = mod(); 
} 
+0

謝謝,兩個回報都給我傳遞變量的能力。 – user3769916