2013-11-28 155 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运算符无关直接释放内存(它只能通过打破引用间接做。

这是一个好的做法呢?嗯,这只是我的意见。我认为当你阅读的代码是不是真的清楚(你需要给它的所有读了解发生了什么),所以我会避免它赞成别的东西(如果你使用某种懒惰的方法例如,你可以使用另一个属性)。这说在代码中的正确评论...

相关问题