2013-11-28 64 views
0

我想允許只調用digest方法一次,所以在計算摘要時刪除函數,並且that是一個沒有函數的簡單對象。Javascript:調用時可以安全地刪除一個函數嗎?

var Content = function(filename) { 
    var that = {}; 
    var name = path.basename(filename); 

    var digest = function(callback) { 
    fs.readFile(filename, function(err, data) { 
     that.hash = crypto.createHash('sha1').update(data).digest('hex'); 
     delete that.digest; // IS THIS SAFE? 
     callback(); 
    }); 
    }; 

    that.digest = digest; 
    that.name = name; 

    return that; 
}; 

使用它:

var content = Content('/path/to/file'); 
content.digest(function() { 
    // content.hash is available 
}); 

這是安全和好的做法呢?

+0

可能是更好地使用簡單的標誌? – Grundy

回答

2

是的,它是安全的,因爲刪除只是刪除該引用,它不會釋放任何內存,使您的功能仍然存在:

不像什麼共同的信念表明,delete運算符無關直接釋放內存(它只能通過打破引用間接做。

這是一個好的做法呢?嗯,這只是我的意見。我認爲當你閱讀的代碼是不是真的清楚(你需要給它的所有讀了解發生了什麼),所以我會避免它贊成別的東西(如果你使用某種懶惰的方法例如,你可以使用另一個屬性)。這說在代碼中的正確評論...

相關問題